有没有办法让visual studio忽略使用未分配对象的编译错误?

cos*_*ost 2 c# visual-studio-2010

我的代码基本上看起来像这样(它实际上不是对象,而是自定义类):

object thing
try {
  thing = new object();
    ......

} catch { stuff }
finally {
  if (thing != null) { some clean up code }
Run Code Online (Sandbox Code Playgroud)

VS并没有让我这样做,因为它说我引用了一个未分配的变量.我很清楚,在运行此代码时可能会取消分配,这就是为什么存在空检查的原因.我不想在try块之外实例化对象,因为它有一点点并且可能抛出异常,我宁愿不要将整个东西包装在另一个try/catch块中,这样我就可以在那里实例化它.我还能做些什么吗?

Jon*_*eet 11

"未分配"与"null"不同.您的代码无效 - 您需要修复它.

这里很容易 - 只需将变量初始化为null:

object thing = null;
Run Code Online (Sandbox Code Playgroud)

现在它肯定会有一个值(一个空引用),所以你可以在finally块中读取它.

关键是在编译器可以证明某个值(无论是否为空)已明确分配的点之前,无法读取局部变量.实际上,局部变量没有"默认值".

(请注意,我通常IDisposable用于清理代码,以及using声明.)


Cod*_*aos 6

不,您无法禁用该编译器错误.但是你为什么不初始化变量呢?

object thing = null;
Run Code Online (Sandbox Code Playgroud)

与字段不同,局部变量不会null自动初始化.它们是未初始化的,这是一种特殊的状态,与存在不同null.