C#枚举器的解救办法

 我来答
慈贞5008
2016-06-01 · TA获得超过200个赞
知道答主
回答量:178
采纳率:100%
帮助的人:155万
展开全部

C# 2.0 的解救办法
使用C# 2.0 这些问题如同五月末的雪般融化了。在这个例子的2.0版本中,我重写上面的列表,使用C# 2.0的两个新特性:泛型 和 枚举器。
我以重新定义实现IEumerable<string>的ListBox作为开始:
public class ListBox : IEnumerable<string>
这样做确定这个类可以在foreach循环中使用,同时确保迭代的值是string类型。
现在,从上个例子中挪去整个嵌套类,并且用下面的代码替换 GetEnumerator方法。
public IEnumerator<string> GetEnumerator()
{
foreach (string s in strings)
{
yield return s;
}
}
GetEnumerator方法使用了新的 yield 语句。yield语句返回一个表达式。yield语句仅在迭代块中出现,并且返回foreach语句所期望的团埋昌值。那也就是,对GetEnumerator的每次调用都将会产生集合中的下一个字符串;所有的状态管理已经都为液源你做好了!
就这样了,你已经完成了。不需要为每个类型实现你自己的enumerator,不需要创建嵌套类。你已经移除了至少30行代码,并且极大地简化了你的代码。程序继续像期望的那样运行,但是状态管理不再是你的任务,所有的都为你做好了。更进一步,由枚举器所返回的值一定是string类型,如果你想要返回其他类型,你塌扒可以修改IEnumerable泛型语句,IEnumerable泛型语句将反射新类型。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式