当我宣布
时string x = new string(new char[0]);
它工作正常。我的问题是将为x分配什么值?
当我检查时
Console.WriteLine(x.CompareTo(null)==0);,it returns false.
答案 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);