C# 异常处理
我在try-catch块(c#)中有一个代码块。代码块可以引发两个异常(ArgumentException/NullReferenceException) 两个异常中的错误处理代码相同。因此,我可以将错误处理代码保留在ArgumentException捕获块中,并且在nullReferenceException中我可以抛出ArgumentException,因为它后面有一个捕获块。不确定它是否会工作,是否对性能有任何损害,是否是一种良好的编程实践 除了在两个catch块中使用相同的代码,或者使用一个单独的方法来保存错误处理代码之外,我是否别无选择C# 异常处理,c#,exception-handling,C#,Exception Handling,我在try-catch块(c#)中有一个代码块。代码块可以引发两个异常(ArgumentException/NullReferenceException) 两个异常中的错误处理代码相同。因此,我可以将错误处理代码保留在ArgumentException捕获块中,并且在nullReferenceException中我可以抛出ArgumentException,因为它后面有一个捕获块。不确定它是否会工作,是否对性能有任何损害,是否是一种良好的编程实践 除了在两个catch块中使用相同的代码,或者使用
我不想将错误处理代码保存在单独的方法和调用中 我总是尝试遵循“不重复”原则,即不要重复自己的工作,也就是说,不要放置多余的代码,因为当您需要更新某些内容时,您可能会搞糟某些内容。因此,我建议将公共逻辑放在一个单独的方法中,并从两个异常中调用它。我始终尝试遵循代表不要重复自己的干式原则,即不要放置冗余代码,因为当您需要更新某些内容时,您可能会搞糟某些内容。因此,我建议将公共逻辑放在一个单独的方法中,并从两个异常调用它
要解决您的问题,您可以创建一个方法,而不是在两个catch块中编写相同的代码 比如说
try
{
//Code
}
catch(NullRefernceException Ex)
{
HandleError();
}
catch(ArgumentException Ex)
{
HandleError();
}
要解决您的问题,您可以创建一个方法,而不是在两个catch块中编写相同的代码 比如说
try
{
//Code
}
catch(NullRefernceException Ex)
{
HandleError();
}
catch(ArgumentException Ex)
{
HandleError();
}
保持常规,因为try代码只生成两种类型的异常,并且错误处理总是相同的
保持常规,因为try代码只生成两种类型的异常,并且错误处理总是相同的
ArgumentException
和NullReferenceException
都继承自SystemException
,那么使用
try
{
//code
}
catch(SystemException EX)
{
//handle error
}
ArgumentException
和NullReferenceException
都继承自SystemException
,那么使用
try
{
//code
}
catch(SystemException EX)
{
//handle error
}
也许你可以
try
{
}
catch(Exception ex)
{
if (ex is NullRefernceException || ex is ArgumentException)
{
//do something
}
else
{
//maybe re-throw the exception
}
}
也许你可以
try
{
}
catch(Exception ex)
{
if (ex is NullRefernceException || ex is ArgumentException)
{
//do something
}
else
{
//maybe re-throw the exception
}
}
请参阅[一次捕获多个异常?]()。请参阅[一次捕获多个异常?]()。@Daniel Joseph:您需要更具体一些。你到底收到了什么错误?如果我从NullReferenceException捕获块抛出ArgumentException,我会得到“ArgumentException Unhandled by the user”错误,消息是Value不在预期范围内。为什么会出现此错误?@Daniel Joseph:这表明你没有“更高”的捕获。因此,您抛出的异常基本上是作为应用程序中未处理的异常出现的。您需要捕获的是方法中的一个
catch(ArgumentException)
块,该方法调用您从中抛出此exceptionfine的方法。因此,抛出异常将在调用方法中查找处理。更高的捕获。。谢谢你的回复。@Daniel Joseph:你需要更具体一些。你到底收到了什么错误?如果我从NullReferenceException捕获块抛出ArgumentException,我会得到“ArgumentException Unhandled by the user”错误,消息是Value不在预期范围内。为什么会出现此错误?@Daniel Joseph:这表明你没有“更高”的捕获。因此,您抛出的异常基本上是作为应用程序中未处理的异常出现的。您需要捕获的是方法中的一个catch(ArgumentException)
块,该方法调用您从中抛出此exceptionfine的方法。因此,抛出异常将在调用方法中查找处理。更高的捕获。。谢谢你的回复……这不是一个好习惯。它还将吞下所有其他例外:pNot不是一个好的做法。它还将吞下所有其他例外:p