我想检查一个变量是否在运行时被初始化,以编程方式.为了使这个原因不那么神秘,请参阅以下不完整的代码:
string s; if (someCondition) s = someValue; if (someOtherCondition) s = someOtherValue; bool sIsUninitialized = /* assign value correctly */; if (!sIsUninitialized) Console.WriteLine(s) else throw new Exception("Please initialize s.");
并完成相关的位.
一个奇怪的解决方案是使用默认值初始化s:
string s = "zanzibar";
然后检查是否更改:
bool sIsUninitialized = s == "zanzibar";
但是,如果someValue或someOtherValue恰好是“桑给巴尔”呢?然后我有一个bug.任何更好的方法?
解决方法
如果编译器知道一个变量尚未初始化,代码将不会编译.
string s; if (condition) s = "test"; // compiler error here: use of unassigned local variable 's' if (s == null) Console.Writeline("uninitialized");
在其他情况下,如果变量未初始化,则可以使用默认关键字.例如,在以下情况下:
class X { private string s; public void Y() { Console.WriteLine(s == default(string)); // this evaluates to true } }
documentation表示,默认值(T)将为引用类型赋值为空,对于值类型为0.所以在评论中指出,这真的和检查null一样.
这一切都掩盖了事实,你应该真正地初始化变量,当它们被首次声明时为null或任何.