Char Traversal的Char Char怎么可能?

时间:2009-10-20 17:44:43

标签: c# enumeration

当我应用IEnumerator并执行MoverNext()时,它会遍历 C样式'a' 'p' 'p' 'l' 'e' '\o'直到找到空字符?我以为它会返回整个字符串。枚举如何在这里工作?

    string ar = "apple";

    IEnumerator enu = ar.GetEnumerator();

    while (enu.MoveNext())
    {

        Console.WriteLine(enu.Current);
    }

我输出为

a
p
p
l
e

4 个答案:

答案 0 :(得分:8)

字符串在C#中不以空值终止。或者更确切地说,字符串以空值终止的事实是对用户隐藏的实现细节。字符串“apple”有五个字符,而不是六个字符。你要求看到这五个字符,我们会向你展示这五个字符。没有第六个空字符。

答案 1 :(得分:3)

空字符不是CLR / .Net字符串的固有部分,因此不会显示在枚举中。枚举字符串将按顺序返回字符串的字符

答案 2 :(得分:2)

枚举器每次迭代(MoveNext()调用)返回基础容器的每个元素。在这种情况下,您的容器是string,其元素类型是char,因此枚举器将在每次迭代时返回一个字符。

此外,字符串的长度由string类型所知,枚举器实现可以利用它来知道何时终止其遍历。

答案 3 :(得分:2)

C#字符串的存储方式类似于COM字符串,长度字段和unicode字符列表。因此,不需要终结器。它使用了更多的内存(多2个字节),但字符串本身可以保留空值而没有任何问题。

解析使用与代码相同的功能的字符串的另一种方法是更多C#类似:

string s="...";
foreach(char c in s)
  Console.WriteLine(c);