为什么readonly字符串变量会自动赋值String.Empty(“”)?

时间:2012-05-23 06:17:39

标签: c# string

以下显示了MyEmpty,它是“”,而我认为它将为null。

public class SomeClass
{
    public static readonly String MyEmpty;
    ...
}

如果MyEmpty是“”而不是null,它是否必须如下所示?

public class SomeClass
{
    public static readonly String MyEmpty = "";
    ...
}

不知何故,'readonly'会让这种事发生,但为什么呢?

提前致谢。

[编辑]

我正在使用MessageBox.Show()测试这两个,假设当我给它一个空值时该方法会抛出异常。但它根本没有抛出任何异常,这就是为什么我认为在我的第一个代码中MyEmpty不是null而是“”。

谢谢大家试图解释null和“”之间的区别以及我的错误。

4 个答案:

答案 0 :(得分:1)

使用您的第一个代码MyEmpty应为null。

public class SomeClass
{
    public static readonly String MyEmpty; <- Gets null
    ...
}

你指定了“readonly”关键字,所以我猜你将它的值改为“”的唯一地方是在构造函数中。

你不能在没有指定的情况下得到“”的原因是需要分配空字符串“”(除非你引用string.empty)所以不能默认你得到那个值

答案 1 :(得分:1)

  

string.Empty “”相同,长度为0的字符串

     

Null 表示无字符串

答案 2 :(得分:0)

String是引用类型。空字符串与string = null不同。第二个意味着没有对字符串对象的引用。

答案 3 :(得分:0)

编译器不允许空结构,因此像readonly params和props这样的东西得到int的初始值“”或0等。因为理论上你不会在为方法声明一个方法时分配它们,它会给你一个异常。