百科问答小站 logo
百科问答小站 font logo



关于C#泛型枚举器的问题? 第1页

  

user avatar   Ivony 网友的相关建议: 
      

原因参考

@vczh

的答案。

因为一开始.NET Framework没有泛型,所以设计了IEnumerable/和IEnumerator接口,后来有了泛型,为了向下兼容代码,IEnumerable<T>/IEnumerator<T>接口都同时实现了非泛型版本的接口。所以我们在实现泛型版本的接口的时候,也得对非泛型版本接口进行实现,你可以认为是强制你向下兼容。




一般情况下,不要自行实现IEnumerable/IEnumerator接口。应当直接使用现有容器提供的实现。如果自行实现了一个容器,使用yield来实现IEnumerable/IEnumerator接口。

如:

       public class MyCollection : IEnumerable<MyItem> {   private readonly List<MyItem> _collection = new List<MyItem>();    public IEnumerator<MyItem> GetEnumerator()   {     return _collection.GetEnumerator();   }    IEnumerator IEnumerable.GetEnumerator()   {     return GetEnumerator();   } }      

不要自己去实现这两个接口的主要原因是基本上大家都很难正确实现这两个接口,不如用系统现成的,再不济,用yield语法自动生成的版本。




  

相关话题

  “闭包是穷人的对象”,“对象是穷人的闭包”,如何理解这两句话? 
  Build 2015上微软宣布Windows 10支持Objective-C与Java编写的应用,这对C#与Windows自身有什么长远影响? 
  哪一门编程语言的 Logo 最好看? 
  如何通俗地解释 C、C++、C#、Java、JavaScript、HTML、Python的用处? 
  .NET类库中HashCodeHelper的实现原理是什么? 
  C#中有什么是与C++的setw()、setfill对应的呢? 
  比尔·盖茨的编程水平怎么样?算得上是大师级别吗? 
  为什么某些人说 JavaScript 是不成熟的语言? 
  编程领域都有哪些牛逼闪闪的「禁术」? 
  .NET 平台中有很多 BS 框架,能介绍一下他们之间的关系和实用价值吗? 

前一个讨论
全人类都不再为吃饭工作后,会出现什么情况?
下一个讨论
你最后悔买的游戏是哪一个?





© 2025-04-19 - tinynew.org. All Rights Reserved.
© 2025-04-19 - tinynew.org. 保留所有权利