当我应用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
答案 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);