C# 有没有办法让VisualStudio在使用未分配对象时忽略编译错误?

C# 有没有办法让VisualStudio在使用未分配对象时忽略编译错误?,c#,visual-studio-2010,C#,Visual Studio 2010,我的代码基本上是这样的(它实际上不是对象,而是一个自定义类): 但是VS不允许我这样做,因为它说我引用了一个未赋值的变量。我很清楚,当这个代码运行时,它可能会被取消分配,这就是为什么会有空检查。我不想在try块之外实例化对象,因为它执行了相当多的操作,可能会引发异常,我不希望将整个对象包装在另一个try/catch块中,这样我就可以在那里实例化它。还有什么我可以做的吗?未分配”与“空”不同。您的代码完全无效-您需要修复它 这里非常简单-只需将变量初始化为null即可开始: object thin

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

但是VS不允许我这样做,因为它说我引用了一个未赋值的变量。我很清楚,当这个代码运行时,它可能会被取消分配,这就是为什么会有空检查。我不想在try块之外实例化对象,因为它执行了相当多的操作,可能会引发异常,我不希望将整个对象包装在另一个try/catch块中,这样我就可以在那里实例化它。还有什么我可以做的吗?

未分配”与“空”不同。您的代码完全无效-您需要修复它

这里非常简单-只需将变量初始化为
null
即可开始:

object thing = null;
现在它肯定会有一个值(空引用),因此您可以在
finally
块中读取它

关键是,在编译器可以证明某个值(无论是否为null)已被明确赋值之前,无法读取局部变量。实际上,局部变量没有“默认值”


(请注意,我通常会使用
IDisposable
来清除代码,同时使用
using
语句。)

不,您不能禁用该编译器错误。但是为什么不初始化变量呢

object thing = null;
与字段不同,局部变量不会自动初始化为
null
。它们是未初始化的,这是一种特殊状态,不同于
null

只需执行即可

object thing = null;
编译器将被安抚

有关编译器对此抱怨的背景信息,请参阅,Where:

这在C#中是非法的,因为使用未分配的局部变量很有可能成为bug。

那么:

    object thing = null;

刚开始设置为null有什么问题

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

} catch { stuff }
finally {
  if (thing != null) { some clean up code }

只需分配null即可开始:

object thing = null; // <-- That's assignment enough
try {
  thing = new object();
  ......
} catch { stuff }
finally {
  if (thing != null) { some clean up code }
}

object thing=null;// 为什么不试试object thing=null;作为第一行?

将代码更改为该行,它应该可以正常工作

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

} catch { stuff }
finally {
  if (thing != null) { some clean up code }

当然,将其初始化为null:objectthing=null;类似的问题:FWIW,它在Java中也是非法的。我不知道unassigned和null是两种不同的状态,谢谢。关于IDisposable,您是对的,这个类需要一个,它只是在我要做的一长串事情中,这里已经详细解释了:
object thing = null;
try {
  thing = new object();
    ......

} catch { stuff }
finally {
  if (thing != null) { some clean up code }