当我宣布

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

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

当我检查时

Console.WriteLine(x.CompareTo(null)==0);,it returns false.
有帮助吗?

解决方案

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

你可以这样做:

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

其他提示

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

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

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

要检查字符串是<=>还是空,请调用(惊讶) <=>

你在这里选择了一个有趣的案例,因为在.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可以返回对现有对象的引用。

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

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

请改为尝试:

Console.WriteLine(x.CompareTo(string.Empty) == 0);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top