使用块调用内部方法

Calling a method inside using block

我有一个 class SomeDisposable,我正在使用它来使用像这样的块

using(var someDisposable = new SomeDisposable(1)) 
{

}

我可以改成类似的东西吗

using (var someDisposable = Get(1))
{

}
public SomeDisposable Get(int x)
{
   return new SomeDisposable(x);
}

会不会影响自动处理能力?

不,它不会影响自动处理能力。 using 块将在块末尾的包装对象上调用 Dispose,无论该对象是使用 new X(...) 语法创建的还是从其他方法返回的。

两个代码片段的行为相同,您只是在摆弄一些对象引用,但这不会改变 using 语句在这种情况下的范围。

编译器会将你的第一段代码变成

SomeDisposable someDisposable = new SomeDisposable(1);
try
{
}
finally
{
    if (someDisposable != null)
    {
        ((IDisposable)someDisposable).Dispose();
    }
}

它将第二个代码变成

SomeDisposable someDisposable2 = Get(1);
try
{
}
finally
{
    if (someDisposable2 != null)
    {
       ((IDisposable)someDisposable2).Dispose();
    }
}
public SomeDisposable Get(int x)
{
   return new SomeDisposable(x);
}

(Source) 如您所见,这没有什么区别。 finally 块将在两种变体中以完全相同的方式执行。