为什么& # 39; 0 & # 39;.ToString() = =字符串.空返回FALSE

本文关键字:字符串 FALSE 返回 ToString 为什么 | 更新日期: 2023-09-27 18:12:23

我只是不能得到点:如果''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

为什么& # 39; 0 & # 39;.ToString() = =字符串.空返回FALSE

没有"空字符"这样的东西,所以你在第一句话中的假设是不正确的。带有单个字符(U+0000)的字符串与空字符串不同——对于开始,第一个字符串的长度是1,而不是0。

char上调用ToString()总是返回长度为1的字符串,其中只包含该字符。在我看来,这是唯一有意义的事情。我不知道你为什么要期待其他的东西。

虽然U+0000经常用作终止字符,但它与字符"不存在"不同。字符串"Foo'0Bar" 与"FooBar"不相同,不应被视为相同。

简而言之:是你的期望不正确,而不是。net:)

因为"'0".Length == 1

我个人称之为空字符而不是空字符。不管它是什么,它是一个字符,一个包含字符的字符串不是空的

在C语言中,这将是一个空字符串。在c#中,这段代码创建了一个包含一个字符的字符串,即NULL字符。因此,该字符串的长度为1,并且它不等于空字符串。

。NET不使用以空结尾的字符串。它使用托管String类,这类具有完全不同的语义。C和c++使用空结束符是因为它们的"字符串"变量概念实际上只是指向字符数组开头的指针,空结束符是扫描字符串末尾的一种方便方法。在。net中,因为String是一个成熟的托管类,所以这个机制是不必要的。