0

当我宣布

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

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

当我检查

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

5 回答 5

7

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

你可以这样做:

Console.WriteLine(string.IsNullOrEmpty(x));
于 2009-10-29T12:05:38.060 回答
5

x将是一个空字符串,与x = "".

null并且""是两个不同的字符串值。特别是,null是一个空引用,所以你不能在它上面调用任何实例成员。因此,如果x为 null,x.Length将抛出一个NullReferenceException.

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

要检查字符串是否为null空,请调用 (surprise) String.IsNullOrEmpty

于 2009-10-29T12:04:50.777 回答
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

于 2009-10-29T12:07:01.317 回答
3

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

Console.WriteLine(x.CompareTo(String.Empty)==0);
于 2009-10-29T12:05:28.323 回答
0

试试这个:

Console.WriteLine(x.CompareTo(string.Empty) == 0);
于 2009-10-29T12:07:06.700 回答