IEnumerable 用于foreach
IEnumerator 用于while(xxx.MoveNext())
明白了没。两个不一样。
解决方案 »
- 听过 PHPRPC 吗?试试我的 Hign!
- 如何读取邮箱中的收件箱
- 配置文件的加密解密问题
- 在WinForm中如何自动算所选两个值的乘积
- listview分页
- winform没有验证控件,请问怎么确保textbox输入的内容只能是数字?
- 请教c#高手,常规软件编辑功能的实现问题
- 一个从未遇到的问题,Input隐藏域总是页面第一次加载的值,请高手帮忙!谢谢!
- 我要用 DataGrid.HitTestInfo,为什么我打DataGrid后为什打点以后不显示HitTestInfo
- 如何访问foxpro数据库?
- 简明扼要,,,,请问第一个窗口hide了并show了第二个窗口,点返回,怎样让第一个窗口再出来,,而不是再加载一遍,,,代码怎么写
- C# 开发eDna数据库读取历史数据的问题,大神请进!急
明白了没。
哎,你到底有没有看明白所有的回复呢?你的getnum()返回的对象实现了IEnumerable接口了吗?它不过是实现了IEnumerator接口而已好不好?!
嗯,试了一下确实如此,这是语法糖,确实不需要 IEnumerable 接口。public class person
{
public A getnum()
{
return new A();
}
}public class A
{
public System.Collections.IEnumerator GetEnumerator()
{
yield return "dshdjs";//为什么没有输出这个??
}
}这可以支持 foreach (string s in arrperson.getnum()) 操作
getnum()返回的对象需要具有一个返回相应类型的 GetEnumerator() 方法,这是在语法上这样规定的。
嗯,试了一下确实如此,这是语法糖,确实不需要 IEnumerable 接口。public class person
{
public A getnum()
{
return new A();
}
}public class A
{
public System.Collections.IEnumerator GetEnumerator()
{
yield return "dshdjs";//为什么没有输出这个??
}
}这可以支持 foreach (string s in arrperson.getnum()) 操作
这是有历史原因的,为了支持数组等运行时添加扩展方法的类,不得已违背了接口的模式,但是通过接口来定义能更加清晰自己必须要实现的方法。
这样就输出所有的值了! person arrperson = new person();
System.Console.WriteLine(arrperson.x);
foreach (string s in arrperson)
{
System.Console.WriteLine(s);
}
foreach (string s in arrperson.getnum())
{
System.Console.WriteLine(s);
}
System.Console.ReadLine();