空值之间有什么区别?

时间:2010-10-06 12:40:19

标签: c#

   what is the difference among these 

   1. string str=string.Empty;
   2. string str="";
   3. string str=null;   

是否有任何不同的方式来使用这些陈述......

感谢 SAJ

2 个答案:

答案 0 :(得分:4)

string.Empty""最终都是对“真正的”字符串对象的引用,该对象恰好是空的。因此,您可以在其上调用方法,使用其Length属性等。

null引用是一个不引用任何对象的值。如果您尝试取消引用null,则会获得NullReferenceException

至于您选择""还是string.Empty - 这实际上是个人偏好的问题。我倾向于选择"",但其他人认为string.Empty更具可读性。请注意,虽然""是常量表达式,但string.Empty不是,因此您不能在case语句中使用后者。

编辑:请注意,此编辑时出现的其他两个答案都表示null不是值,或者该变量尚未赋值。这是不正确的。 null是一个与任何其他值一样的值 - 只是它不引用任何对象。特别是,为变量分配null将覆盖任何先前的值,如果它是一个局部变量,则赋值意味着该变量已被“明确赋值”。例如,比较这两个片段

string s;
Console.WriteLine(s); // Compile-time error: s isn't definitely assigned

string s = null;
Console.WriteLine(s); // Fine: s has the value null

答案 1 :(得分:2)

string.Empty是另一种说""的方式。 (according to Jon Skeet,使用团队中常见的任何内容)。 null表示根本没有赋值。
(但是Skeet在这里解释他自己( - :)