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