2

为什么我不能在try块内分配对象变量?

如果我尝试这样做并清理finally块中的变量,我会收到编译器错误:“使用未分配的局部变量”。这是没有意义的,因为变量是在try块之前声明的,并且在finally块中我首先检查变量是否为null.

为什么下面的代码不能编译?我正在检查是否dbcnull没有机会尝试对未分配的变量做某事。

例如:

DbConnection dbc;
try {
    dbc = <some method call returning an open DbConnection>
    // do stuff
} catch (Exception e) { // do stuff }
finally { 
    if (dbc != null) {
        dbc.Close();
    }
}
4

2 回答 2

13

将您的声明更改为,DbConnection dbc = null;以便编译器可以确定该变量已分配。(仅仅声明 dbc与分配 null 值不同,您必须使用本地显式。)

您现有代码失败的原因是完全有可能在设置 dbc 之前发生异常。因此,编译器不能假定在 finally 块执行时分配了 dbc。

有关详细信息,请参阅语言规范中关于明确分配的第 5.3 节。

http://msdn.microsoft.com/en-us/library/aa691172(VS.71).aspx

于 2010-08-11T03:08:52.333 回答
1

改变这个

DbConnection dbc;

对此

DbConnection dbc = null;
于 2010-08-11T03:10:25.230 回答