最后清空{}有用吗?

时间:2015-12-18 20:30:45

标签: c# try-finally

try有一些值elsewhere

try{}
finally
{ 
   ..some code here
}

然而,对于一个空的最终是否有任何用途,例如:

try
{
   ...some code here
}
finally
{}

编辑:注意我实际上没有检查过CLR是否有为空finally{}生成的代码

2 个答案:

答案 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块是没有用的。