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
声明.)
不,您无法禁用该编译器错误.但是你为什么不初始化变量呢?
object thing = null;
Run Code Online (Sandbox Code Playgroud)
与字段不同,局部变量不会null
自动初始化.它们是未初始化的,这是一种特殊的状态,与存在不同null
.
归档时间: |
|
查看次数: |
2133 次 |
最近记录: |