最终清空{}有什么用吗?

Mar*_*iss 6 c# try-finally

try值具有某些价值,如其他地方所述

try{}
finally
{ 
   ..some code here
}
Run Code Online (Sandbox Code Playgroud)

但是,最后有什么用为空:

try
{
   ...some code here
}
finally
{}
Run Code Online (Sandbox Code Playgroud)

编辑:注意我还没有实际检查以查看CLR是否为空生成任何代码 finally{}

Ser*_*hyk 5

语句中的空finallytry-finally是无用的。来自MSDN

通过使用 finally 块,您可以清理在 try 块中分配的任何资源,并且即使在 try 块中发生异常也可以运行代码。

如果finally语句为空,则表示您根本不需要此块。它还可以显示您的代码不完整(例如,这是DevExpress 用于代码分析的规则)。

实际上,很容易证明语句中的空finallytry-finally是无用的:

使用此代码编译一个简单的控制台程序

static void Main(string[] args)
{
    FileStream f = null;
    try
    {
        f = File.Create("");
    }
    finally
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

在 IL Disassembler(或任何其他可以显示 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
Run Code Online (Sandbox Code Playgroud)