繁体   English   中英

如何处理类型为'System.ArgumentException'的未处理异常?

[英]How to handle an unhandled exception of type 'System.ArgumentException'?

我在C#winforms应用程序中列出了所有USB应用程序,并尝试使用脚踏板播放音频。

我收到以下错误。

mscorlib.dll中发生了'System.ArgumentException'类型的未处理异常

附加信息:目标数组的长度不足以复制集合中的所有项目。 检查数组索引和长度。

private void ReadProcess(HidReport report)
{
    byte[] message = report.Data;
    uint _message;
    Array.Reverse(message);
    _message = BitConverter.ToUInt32(message, 0); // exception here!
    ....

如果您只是想处理特定的异常,请使用try/catch并明确地说出要捕获的异常类型:

try
{
   byte[] message = report.Data;
   uint _message;
   Array.Reverse(message);
   _message = BitConverter.ToUInt32(message, 0);
} catch(ArgumentException ex)
{
   // Your logic...
}

由于您没有共享确切发生异常的位置,因此我无法确定要检查的内容,但是如果可能,您应该尝试验证参数并抛出自己的异常或返回特定的错误。

当startIndex大于或等于值的长度减去3,并且小于或等于值的长度减去1时BitConverter.ToUInt32(byte[] value, int startIndex)引发ArgumentException

问题出在report.Data因为它不符合要转换的要求。

您总是可以将代码最终包装在try-catch-finally中,并处理异常,但是我建议您阅读有关不同类型的异常以及如何处理它们的更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM