关于c#:String.Empty与“”


String.Empty versus “”

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What is the difference between String.Empty and “”

String.Empty""有什么不同?


据Brad Abrams称:

As David implies, there difference
between String.Empty and"" are pretty
small, but there is a difference. ""
actually creates an object, it will
likely be pulled out of the string
intern pool, but still… while
String.Empty creates no object… so if
you are really looking for ultimately
in memory efficiency, I suggest
String.Empty. However, you should
keep in mind the difference is so
trival you will like never see it in
your code...

As for System.String.Empty or
string.Empty or String.Empty… my care
level is low ;-)

更新(2015年6月3日):

评论中提到,上述2003年的引用不再真实(我假设这是指""实际上创建了一个对象)。所以我在C 5(vs 2013)中创建了几个简单的控制台程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Program
{
    static void Main()
    {
        // Outputs"True"
        Debug.WriteLine(string.IsInterned(string.Empty) != null);
    }
}

class Program
{
    static void Main()
    {
        // Outputs"True"
        Debug.WriteLine(string.IsInterned("") != null);
    }
}

这表明,当代码开始运行时,""String.Empty都是实习生,这意味着对于所有实际用途,它们都是相同的。

布拉德评论中最重要的部分是:

you should keep in mind the difference is so trival you will
like never see it in your code...

这就是底线。在"和string.empty之间进行选择不是基于性能的决定。不要浪费很多时间去想它。根据您发现更具可读性的内容或项目中已经使用的约定进行选择。


没什么不同。

http://msdn.microsoft.com/en-us/library/system.string.empty.aspx:

The value of this field is the zero-length string,"".

In application code, this field is most commonly used in assignments to initialize a string variable to an empty string. To test whether the value of a string is String.Empty, use the IsNullOrEmpty method.


不过,在大多数情况下,我发现使用String.Empty is identical to""比使用String.IsNullOrEmpty(str)更容易,而不必比较str =="" || str == null,如果您在.NET 4.0上,String.IsNullOrWhiteSpace(str)覆盖的情况甚至更多,而且目前为止是最好的。


没有区别。有些人喜欢使用String.Empty来实现代码可读性。用你觉得舒服的那个。


string.empty始终是同一个对象

"始终是一个新对象,垃圾收集器可能必须删除它。

因此,应始终使用string.empty而不是"。

1
2
string a="";
string b=string.Empty;

翻译为

1
2
IL_0000:  ldstr      ""
IL_0005:  ldsfld      System.String.Empty