c# – 使用块:将对象初始化编译成try块

在我的项目中,我有一个构造函数可以抛出的对象.所以我正在使用的代码如下:

MyObject obj = null;
try
{
    obj = new MyObject();
    obj.DoSomething();
}
finally
{
    if (obj != null)
        obj.Free();
}

正如Uses of “using” in C#中所述,代码就像

using (MyObject obj = new MyObject())
{
    obj.DoSomething();
}

由.NET CLR转换为

{
    MyObject obj = new MyObject();
    try
    {
        obj.DoSomething();
    }
    finally
    {
        if (obj != null)
            ((IDisposable)obj).Dispose();
    }
}

问题是:我可以以某种方式使CLR将对象的构造函数放入try块中吗?

最佳答案

The question is: can I somehow make CLR put object’s constructor into a try block?

不,或者说,从资源管理的角度来看,这样做毫无意义.如果构造函数抛出异常,那么就不会有一个分配给obj的引用,所以没有什么可以调用Dispose.

至关重要的是,如果构造函数抛出异常,它会处理它分配的任何资源,因为调用者将无法执行.

转载注明原文:c# – 使用块:将对象初始化编译成try块 - 代码日志