2017-06-02 74 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循环,尽可能多的你的用例允许。 –