空的try具有某些值,如elsewhere所述

try{}
finally
{
   ..some code here
}

但是,最后是否有空有什么用,例如:
try
{
   ...some code here
}
finally
{}

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

最佳答案

finally语句中的空try-finally块是无用的。从MSDN



如果finally语句为空,则意味着您根本不需要此块。它还可能显示您的代码不完整(例如,DevExpress在代码分析中使用的the rule)。

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

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

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

在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

关于c# - 最终清空{}有什么用吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34363478/

10-13 08:09