2009-10-20 49 views
0

當我應用IEnumerator並執行MoverNext()它會像 C-直到找到空字符?我認爲它會返回整個字符串。枚舉在這裏工作?如何通過Char遍歷可能?

string ar = "apple"; 

    IEnumerator enu = ar.GetEnumerator(); 

    while (enu.MoveNext()) 
    { 

     Console.WriteLine(enu.Current); 
    } 

我得到的輸出

a 
p 
p 
l 
e 

回答

8

字符串在C#中不以空值終止。或者,字符串以null結尾的事實是一個對用戶隱藏的實現細節。字符串「apple」有五個字符,而不是六個。你要求看到這五個角色,我們向你展示所有角色。沒有第六個空字符。

+0

如何C#發現橫移來承攬? – user193276 2009-10-20 17:49:44

+0

對不起遍歷結束 – user193276 2009-10-20 17:51:25

+0

它知道字符串的長度。不需要終結者。 – EricSchaefer 2009-10-20 17:51:56

3

空字符不是一個CLR/.NET串的固有部分,所以在枚舉不會出現。枚舉字符串將按順序返回字符串的字符

2

枚舉器每次迭代返回底層容器的每個元素(調用MoveNext())。在這種情況下,您的容器是string,其元素類型爲char,因此枚舉器將在每次迭代中返回一個字符。

此外,字符串的長度由string類型所知,枚舉器實現可以利用該類型來知道何時終止其遍歷。

2

C#字符串像COM字符串一樣存儲,一個長度字段和一個unicode字符列表。因此不需要終結者。它使用了更多的內存(更多2個字節),但是這些字符串本身可以保留空值而沒有任何問題。

另一種方式來解析使用相同的功能代碼僅是更類似C#中的字符串:

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