gpt4 book ai didi

c# - 处理一个不会在C#中引发异常的类

转载 作者:太空宇宙 更新时间:2023-11-03 17:59:44 25 4
gpt4 key购买 nike

我有一些看起来像这样的UI代码:

try
{
SomeClass classInstance = new SomeClass(someId);
}
catch (Exception exception)
{
// Content wasn't created, show a message, stop processing
return;
}


似乎添加了try catch,因为如果SomeClass的构造函数接收到的someId无效,并且在数据库中找不到数据,则该炸弹将炸毁。

最近通过FXCop运行此代码,它警告您不要使用常规的Exception,但是SomeClass所做的只是抛出一个新的Exception,并带有一条消息,指出它未能初始化。

我想问题是类构造函数应该有自己的自定义异常,然后可以在我的UI中处理它,但是我想知道我还能对上面的代码做些什么来满足FXCop的要求?

最佳答案

之所以存在FxCop规则,是因为上面的catch (Exception)块捕获了所有可能的异常,包括您可能无法以有用的方式捕获的低级异常,例如StackOverflowException

正确的方法肯定是抛出一种更特定的类型:您发明的一种类型,还是一种与您的情况非常匹配的现有.NET框架异常类型。 (如有疑问,我通常会选择InvalidOperationException。)

或者,您可以在捕获时检查确切的异常类型。这不会阻止FxCop警告,但是它应该解决潜在的问题:

catch (Exception exception)
{
if (exception.GetType() == typeof(Exception))
{
// Content wasn't created, show a message, stop processing
return;
}
else
{
// Some other exception type that wasn't thrown from our code -
// delegate to a higher-level exception handler
throw;
}
}

关于c# - 处理一个不会在C#中引发异常的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3405200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com