Empty finally{} of any use?
一个空的
1 2 3 4 5 | try{} finally { ..some code here } |
但是,最终是否有空的用途,例如:
1 2 3 4 5 6 | try { ...some code here } finally {} |
编辑:注意,我没有实际检查clr是否有为空
By using a finally block, you can clean up any resources that are
allocated in a try block, and you can run code even if an exception
occurs in the try block.
如果
实际上,很容易证明
用这个代码编译一个简单的控制台程序
1 2 3 4 5 6 7 8 9 10 11 | static void Main(string[] args) { FileStream f = null; try { f = File.Create(""); } finally { } } |
在il disassembler(或任何其他可以显示il代码的工具)中打开编译后的dll,您将看到编译器只是删除了
1 2 3 4 5 6 7 8 9 10 | .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 |
finally块用于执行应始终发生的逻辑,无论是否引发异常,例如关闭连接等。
因此,拥有一个空的finally块是没有意义的。