在 C# 中,我可以这样写:
using (new MyDisposableClass().MethodA());
分号会导致显示编译器警告,其中指出可能存在错误的空语句。我没有运行上面的代码,但是该方法不会仍然被调用吗?
这种类型的编码约定有什么用途?我在这里看到了关于此的另一个帖子,但我问是否现在有任何差异/因此有不同的回复。
Thanks
这段代码基本上翻译为
MyDisposableClass tmp = new MyDisposableClass().MethodA();
try
{
}
finally
{
if( tmp != null )
tmp.Dispose();
}
基本上你正在处理调用的结果MethodA
,而不是丢弃MyDisposableClass
这就是可能的意图。
The ;
遵循 using 语句是合法的,但警告表明您可能错误地将其添加到那里。例如,以下代码将无法编译:
using( var tmp = new MyDisposableClass() );
{
tmp.MethodA();
}
解析器评估两个完全独立的块,编译器会看到它,就好像您输入了以下内容:
using( var tmp = new MyDispoableClass() )
{
}
{
tmp.MethodA();
}
很容易错过悬挂的;
通过肉眼观察,编译器警告只是表明您可能打算做其他事情。有时需要更简短的陈述,我认为表明这是有意的最好方法是使用{}
代替;
.
using( new MyDisposableClass().MethodA() ){}
仍请注意,这是处理对 Method 的调用结果 - 而不是 Disposable Class 实例。你的代码实际上应该写成
using( var tmp = new MyDisposableClass() ){ tmp.MethodA(); }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)