string s1;
string s2 = null;
if (s1 == null) // compile error
if (s2 == null) // ok
我真的不明白为什么需要显式赋值。空变量和未赋值变量有什么区别?我总是假设未赋值的变量被运行时/编译器简单地赋值为null。如果它们不是null,那么它们是什么?
发布于 2010-10-08 20:00:58
为什么需要显式赋值的原因非常简单。当人们试图使用未赋值/未初始化的变量时,这通常是错误的来源。
通过强制开发人员这样做,它消除了当开发人员忘记初始化变量时发生的错误。通过初始化它,你就可以控制它了。
这真的是一件好事!我不知道在一些脚本语言中有多少次我有未初始化或未定义的变量,这些变量需要相当长的时间才能找到^^
发布于 2010-10-08 19:55:57
C#编译器不允许使用未初始化的局部变量。初始未赋值的变量没有初始值。
发布于 2010-10-10 05:51:22
要记住的一件事是,作用域将在其中发挥作用。如果将S1定义为类变量,然后在函数中对其进行测试,编译器就不会停止,代码也会正常运行。原因是变量是在实例化类时初始化的。
在方法内部移动时,很可能在初始化变量之前测试变量时忘记了一些东西。
我看到的另一个警告是字符串默认为什么?(更重要的是,这是在一个不会改变的规范中吗?请记住,空字符串与分配给null的字符串不同。不过,有一种方法可以绕过这个问题,因为您可以改为使用string.IsNullOrEmpty(S1)进行测试。
https://stackoverflow.com/questions/3890206
复制相似问题