为什么我不能在try块中分配对象变量?
问题描述:
为什么我不能在try
块中分配对象变量?为什么我不能在try块中分配对象变量?
如果我试图做到这一点,清理在finally
块我得到一个编译错误变量:“使用未分配的局部变量的”。这是没有意义的,因为变量是在try
块之前声明的,而在finally
块中,我首先检查变量是否为null
。
为什么不能编译下面的代码?我正在检查dbc
是否为null
,因此没有机会尝试使用未分配的变量进行操作。
如:
DbConnection dbc;
try {
dbc = <some method call returning an open DbConnection>
// do stuff
} catch (Exception e) { // do stuff }
finally {
if (dbc != null) {
dbc.Close();
}
}
答
更改您的声明DbConnection dbc = null;
因此编译器能确切知道的变量分配。 (仅仅声明dbc
是不一样为它指定一个null值,你必须明确与当地。)
现有的代码失败的原因是,它是完全有可能的DBC之前发生异常已设置。因此,编译器无法假定在执行finally块时分配了dbc。
有关详细信息,请参见有关明确分配的语言规范的第5.3节。
http://msdn.microsoft.com/en-us/library/aa691172(VS.71).aspx
答
更改此
DbConnection dbc;
这个
DbConnection dbc = null;
怎样去除设置关键字? – SteveCav 2010-08-11 03:08:45
也许相关:http://*.com/questions/94977/why-arent-variables-declared-in-try-in-scope-in-catch-or-finally – cofiem 2010-08-11 03:10:24
我敢打赌,Jon Skeet会从无处出现,获得最佳答案奖。打哈欠。 – 2010-08-11 03:21:23