第一篇学习(翻译)笔记: C#,怎样用Foreach访问集合类

How to: Access a Collection Class with foreach (C# Programming Guide)

怎样用Foreach访问集合类(C#编程向导)

 

想要在非一般类型集合类(non-generic collection class?)中使用Foreach,需要作如下考虑。

 

C#中,如果要求一个集合类能使用foreach,继承IEumerable和IEnumerator并不是必须的。只要这个类具有GetEnumerator, MoveNext, Reset和Current 成员,就可以和foreach工作。忽略接口的好处是,你可以定义比Object更明确的Current返回类型,具有类型安全(type-safety?)的好处。

 

//不再继承IEnumerable

public class Tokens

//不返回一个IEnumerator

public TokenEnumerator GetEnumeator()

//不再继承IEnumerator

public class TokenEnumerator

//类型安全,返回string, 不是object

public string Current

 

 

忽略接口的缺点是,该集合类不能和其它运行时兼容语言(common language run-time-compatible languages?)foreach声明互操作

如果想集合二者优点,C#类型安全,以及与其它运行时兼容语言互操作,你可以通过继承IEumerable和IEnumerator和使用如下所述的明确的接口实现来达到这一目的。

 

//具体代码,明日待续

 

 

IEumerable 与 IEnumerator必须一起使用的原因,自己理解如下。先看IEnumerable的定义。

 

public interface IEnumerable

{

      IEnumerator GetEnumerator();

}

 

IEnumerable的定义中要求必须实现IEnumerator类型的返回值,所以在IEnumerable的实现类,应该也要对IEnumerator接口做实现吧。不知道这么理解正确否。

 

 

注释:带问号的括号内容,因为自己对中文的翻译没有把握

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值