为什么我不能在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();
}
}
答案 0 :(得分:12)
将您的声明更改为DbConnection dbc = null;
,以便编译器可以确定已分配变量。 (仅仅声明 dbc
与为其赋值null不同,您必须明确地使用本地。)
现有代码失败的原因是在设置dbc之前完全可能发生异常。因此,编译器不能假定在finally块执行时分配dbc。
有关详细信息,请参阅明确赋值的语言规范第5.3节。
http://msdn.microsoft.com/en-us/library/aa691172(VS.71).aspx
答案 1 :(得分:1)
更改此
DbConnection dbc;
到这个
DbConnection dbc = null;