2017-06-02 72 views
0

我正在學習有關集合,在這種情況下,接口IEnumerable和IEnumerator的,我研究了這個簡單的例子:IEnumerable和IEnumerator的或foreach C#

string s = "Hello world"; 
      IEnumerator rator = s.GetEnumerator(); 

      while (rator.MoveNext()) 
      { 
       char c = (char)rator.Current; 
       Console.WriteLine(c+"."); 
      } 

但轉念一想......我可以用foreach循環做到這一點,所以我嘗試:

foreach (char c in s) 
      { 
       Console.WriteLine(c+"."); 
      } 

如果我能做到與foreach循環一樣,爲什麼我必須使用IEnumerable和IEnumerator的接口?性能更好?想象一下,我正在做一個拼寫大文本每個字母的程序,我需要使用什麼?接口或foreach循環?

我一直在研究有關foreach循環,我發現foreach與接口一起工作。

+1

https://stackoverflow.com/questions/1085638/ienumerable-ienumerator-vs-foreach-when-to-use-what –

回答

1

如果我能做到與foreach循環一樣,爲什麼我必須使用 接口IEnumerable和IEnumerator的?

除了數組,foreach循環利用IEnumerable和IEnumerator來顯示/執行操作。

但是,您不能使用foreach循環完全修改元素本身,只能在Enumerator(Java中的Iterator)上使用。你不能使用foreach循環去除元素。

什麼是更好的表現?

堅持到foreach循環,因爲您不應該重新發明輪子,除非您必須修改集合中的元素。

想象一下,我正在做一個程序,拼出一個大文本的每個字母, 我需要使用什麼?接口或foreach循環?

這種情況下,你應該簡單地使用foreach循環,因爲你只需要拼出文本的每個字母,這是一個字符串。你不修改字符串(不是創建一個新字符串)本身。

+0

哦,謝謝,所以我只需要使用這些接口,如果我不得不修改某些元素集合。 –

+0

@JoseAviles - 是的,您應該在這些情況下使用IEnumerator接口。否則,堅持foreach循環,儘可能多的你的用例允許。 –