.net catch exception inside new initialized blocked of an object in c#

a0zr77ik  于 2023-06-25  发布在  .NET
关注(0)|答案(1)|浏览(106)

在这里,我无法捕获使用new关键字创建的对象的简化初始化块中的异常。

Test test1 = new Test() { };

我尝试了下面的代码,但无法捕获异常

Test test1 = new Test()
{
 try
 {
  
 }
 catch()
 {
 
 }
};
xjreopfe

xjreopfe1#

这里的{ }是一个object initializer,而不是一个代码块:

Test test1 = new Test() { };

你不能只是在一个对象初始化器中放入任何你喜欢的语句。它只是用于初始化新创建的对象的属性的语法。例如:

Test test1 = new Test() { SomeProperty = "test" };

它在语义上类似于(几乎在所有情况下都足够类似):

Test test1 = new Test();
test1.SomeProperty = "test";

如果你想捕获一个在创建对象时发生的异常,请将其 * Package * 在try/catch中。例如:

try
{
    Test test1 = new Test() { SomeProperty = "test" };
    // use test1 for something...
}
catch (Exception ex)
{
    // handle the exception
}

或者,如果test1的作用域需要在try/catch之外,你可以先声明它:

Test test1 = null;
try
{
    test1 = new Test() { SomeProperty = "test" };
}
catch (Exception ex)
{
    // handle the exception
}
// if test1 is not null, use it for something...

另一方面,如果您希望在setter中更具体地处理任何给定属性的异常,则可以在该setter中处理它们,或者可以避免对象初始化器语法并单独设置属性,根据逻辑需要将相关属性 Package 在try/catch中。

相关问题