C# · 12月 26, 2021

C# – 检查变量是否初始化[已关闭]

我想检查一个变量是否在运行时被初始化,以编程方式.为了使这个原因不那么神秘,请参阅以下不完整的代码: 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或任何.