解决方案 »
- 求帮忙,动态绑定拼出来的HTML数据,为啥不刷新,用户体验较好??
- 在 System.IndexOutOfRangeException 中第一次偶然出现的“System.Data.dll”类型的异常
- Combobox问题,在线等
- 一个对单简的问题,怎点击按错启动指定的程序??
- char,string,二进制数据类型的 区别是什么?
- 弱弱的问,如何……
- 高分求助解决方案!!!!!
- 关于winform ftp的一些问题
- 请问2005和2003有关项(item)和交替项(AlternatingItem)的问题
- 获取控件所有属性问题,请帮忙,急!!!!!!!!
- winform textbox控件预览时,里面的内容会不见的?这是为什么?
- C# CSV 导入数据库
看这里 看这里
http://blog.csdn.net/byondocean/article/details/6871881
https://msdn.microsoft.com/zh-cn/library/system.collections.ienumerable.aspx
改成:
public IEnumerator GetEnumerator()
1. Prims 类实现IEnumerable接口,调用方不变
public class Prims 改为:public class Prims : IEnumerable
public IEnumerable GetEnunmerator() 改为:public IEnumerator GetEnumerator()2. Prims 类不实现IEnumerable接口,调用方调用GetEnumerator
public IEnumerable GetEnunmerator() 改为:public IEnumerable GetEnumerator() (只是改了拼写错误)
foreach (long i in primesFrom2To1000) 改为:foreach (long i in primesFrom2To1000.GetEnumerator())
严格的说,IEnumerable接口并不是必要的:这可能是Dotnet2以前,没有泛型支持下,为减少装箱拆箱的一种编译器优化。很有趣的,同时我比较难理解的是,Dotnet4.5的async模式还在支持编译器Duck Typing,比如一个类只要有可用的GetAwaiter函数,它就是awaitable(要代码测试的朋友注意async需要Dotnet 4.5):
class My
{
public System.Runtime.CompilerServices.TaskAwaiter GetAwaiter()
{
return Task.Delay(1000).GetAwaiter();
}
}private async void button1_Click(object sender, EventArgs e)
{
await new My(); // 注意My不用实现任何接口
}
找到了Eric Lippert 关于这个问题的解释:http://blogs.msdn.com/b/ericlippert/archive/2011/06/30/following-the-pattern.aspx ,看起来现在c#里面有3种这样的"pattern-based approach"
//迭代器的返回类型必须是IEnumerable或IEnumerator中的任意一种
//定义一个泛型对象,用于存储
public static IList<object> items = new List<object>();
// 通过迭代器获取泛型中的所有对象值
// <param Node="n">泛型对象</param>
public static IEnumerable<object> GetValues()
{
if (items != null)//如果泛型不为空
{
foreach (object i in items)//遍历泛型中的对象
yield return i;
}
}
private void Form1_Load(object sender, EventArgs e)
{
//向泛型集合中添加站点数据
items.Add("长春路");
items.Add("百合路");
items.Add("河南街");
items.Add("东市场");
items.Add("上海路");
items.Add("制药厂");
items.Add("胶合板厂");
items.Add("红旗路路");
items.Add("开源路");
items.Add("东盛路");
items.Add("安乐路");
items.Add("岭东路");
items.Add("公平路");
items.Add(108);
items.Add(true);
} private void button1_Click(object sender, EventArgs e)
{
foreach (object i in GetValues())//遍历泛型集合
listView1.Items.Add(i.ToString());//在列表视图中显示公交车站点
}