空try
有一些值elsewhere
try{}
finally
{
..some code here
}
然而,对于一个空的最终是否有任何用途,例如:
try
{
...some code here
}
finally
{}
编辑:注意我实际上没有检查过CLR是否有为空finally{}
生成的代码
答案 0 :(得分:2)
finally
语句中的空try-finally
块无用。来自MSDN
通过使用finally块,您可以清理所有资源 在try块中分配,即使异常也可以运行代码 发生在try块中。
如果finally
语句为空,则表示您根本不需要此块。它还可以显示您的代码不完整(例如,这是DevExpress在代码分析中使用的the rule)。
实际上,很容易证明finally
语句中的空try-finally
块是无用的:
使用此代码编译一个简单的控制台程序
static void Main(string[] args)
{
FileStream f = null;
try
{
f = File.Create("");
}
finally
{
}
}
在IL反汇编程序(或任何其他可以显示IL代码的工具)中打开已编译的dll,您将看到编译器只是删除了try-finally
块:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 12 (0xc)
.maxstack 8
IL_0000: ldstr ""
IL_0005: call class [mscorlib]System.IO.FileStream [mscorlib]System.IO.File::Create(string)
IL_000a: pop
IL_000b: ret
} // end of method Program::Main
答案 1 :(得分:0)
finally块用于执行应始终发生的逻辑,无论是否抛出异常,例如关闭连接等。
因此,拥有一个空的finally块是没有用的。