我无法理解这一点:如果'\ 0'是一个空字符,如果一个字符串是一种字符数组,为什么会发生这种情况?
char value = '\0';
bool isEmpty = value.ToString() == string.Empty; // This returns FALSE because
// '\0'.ToString() returns "\0"
// where I expect it to be
// string.empty
答案 0 :(得分:16)
没有“空炭”这样的东西,所以你在第一句中的假设是不正确的。具有单个字符(U + 0000)的字符串与空字符串不同 - 对于开头,第一个字符串的长度为1,而不是0.
在ToString()
上调用char
将始终返回长度为1的字符串,仅包含该字符。这是IMO唯一有意义的事情。我不知道为什么你会期待其他任何东西。
虽然U + 0000经常用作终止字符,但它与“不存在”字符不同。字符串“Foo \ 0Bar”不与“FooBar”相同,不应该被视为相同。
简而言之:这是你的期望不正确,而不是.NET :)。
答案 1 :(得分:3)
由于"\0".Length == 1
...
答案 2 :(得分:2)
我个人称之为空字符而不是空字符。不管它是什么,虽然它的一个字符和一个有字符的字符串不是空的。
答案 3 :(得分:1)
在C中,这将是一个空字符串。在C#中,此代码创建一个包含一个字符的字符串,即NULL字符。因此,该字符串的长度为1,并且它不等于空字符串。
答案 4 :(得分:0)
.NET不使用以null结尾的字符串。它使用托管的String类,它具有完全不同的语义。 C和C ++使用空终止符,因为它们的“字符串”变量的概念实际上只是指向字符数组开头的指针,而空终止符是扫描字符串结尾的便捷方式。在.NET中,由于String是一个成熟的托管类,因此不需要这种机制。