字符串分配-Clarification

时间:2009-10-29 12:03:37

标签: c# string variable-assignment

当我宣布

string x = new string(new char[0]);

它工作正常。我的问题是将为x分配什么值?

当我检查时

Console.WriteLine(x.CompareTo(null)==0);,it returns false.

5 个答案:

答案 0 :(得分:7)

当您指定新的char [0]时,您的字符串不为空。它是空的。

你可以这样做:

Console.WriteLine(string.IsNullOrEmpty(x));

答案 1 :(得分:5)

x将为空字符串,与x = ""相同。

null""是两个不同的字符串值。特别是,null是一个空引用,因此您无法在其上调用任何实例成员。因此,如果x为空,x.Length将抛出NullReferenceException

相比之下,""(或String.Empty)是一个恰好包含0个字符的普通字符串。它的实例成员可以正常工作,"".Length等于0。

要检查字符串是null还是空,请致电(惊讶)String.IsNullOrEmpty

答案 2 :(得分:4)

你在这里选择了一个有趣的案例,因为在.NET上它违反了最少惊喜的原则。每次执行

string x = new string(new char[0]);

您将获得对相同字符串的引用。

(编辑:只是要非常清楚这一点 - 它是一个非空引用。它指的是一个字符串,就像你使用任何其他形式的构造函数,或使用字符串文字一样。)

我确定使用将不同的字符串引用为“”,但现在它看起来是同一个字符串:

using System;

public class Test
{
    static void Main()
    {
        object x = new string(new char[0]);
        object y = new string(new char[0]);
        object z = "";
        Console.WriteLine(x == y); // True
        Console.WriteLine(x == z); // True
    }
}

据我所知,这是仅 的情况,其中为类调用new可以返回对现有对象的引用。

答案 3 :(得分:3)

字符串不为空,它是空的。

Console.WriteLine(x.CompareTo(String.Empty)==0);

答案 4 :(得分:0)

请改为尝试:

Console.WriteLine(x.CompareTo(string.Empty) == 0);