在你的网络上找到的时候明确不使用“使用”最例子,图案看起来类似:IDisposable:是否有必要在finally {}上检查null?
SqlConnection c = new SqlConnection(@"...");
try {
c.Open();
...
} finally {
if (c != null) //<== check for null
c.Dispose();
}
如果你使用“使用”,并期待在生成的IL代码,你可以看到,它产生的空
L_0024: ldloc.1
L_0025: ldnull
L_0026: ceq
L_0028: stloc.s CS$4$0000
L_002a: ldloc.s CS$4$0000
L_002c: brtrue.s L_0035
L_002e: ldloc.1
L_002f: callvirt instance void [mscorlib]System.IDisposable::Dispose()
L_0034: nop
L_0035: endfinally
我明白了为什么IL被翻译检查null检查(不知道你使用的块里面做了什么),但如果你使用try ..最后,你完全控制了如何在try..finally bl中使用IDisposable对象ock,你真的需要检查null吗?如果是这样,为什么?
在使用/ try块中将变量设置为null的情况下,是否可以防止出现空引用异常? – Gishu 2010-04-08 05:56:24
这就是我在想 – BlackTigerX 2010-04-08 05:57:12
好问题..让我走出我的代码涂鸦板,并学习新的东西。 – Gishu 2010-04-08 06:44:48