C#迭代法
2021-03-11 05:30
标签:rem list 也会 有一个 对象 循环语句 目录 key 关于 C# 便捷实现可迭代对象间的赋值 目录 都是迭代,为啥我一定要用foreach 如果换成是字典呢? 关于 foreach 都是迭代,为啥我一定要用foreach ? 问题起源于本人的一个练手的扑克牌程序:洗完牌之后要发给场上的三人。 ? 只发给单个人的时候用 foreach 循环一下就好了,但三个人就有点麻烦了。 ? 牌组用list 保存你可能会想到这样写: for (int i = 0; i
{ a.Add(PreCard[i++]); b.Add(PreCard[i++]); c.Add(PreCard[i]); } ? 或者这样写 int i = 0; do { a.Insert(i, PreCard[0]); b.Insert(i, PreCard[1]); c.Insert(i, PreCard[2]); PreCard.RemoveRange(0, 3); i++; } while (i
? 但如果还想使用类似迭代器的方法,那么可以使用 GetEnumerator(),因为我们知道 foreach 里面实际上就是调用了这个方法。 ? 所以我们还可以直接调用 GetEnumerator 和 MoveNext 来进行迭代: IEnumerator ie = PreCard.GetEnumerator(); while(ie.MoveNext()) { a.Add(ie.Current.ToString()); ie.MoveNext(); b.Add(ie.Current.ToString()); ie.MoveNext(); c.Add(ie.Current.ToString()); } 如果换成是字典呢? ? 如果是直接把上面的代码搬过来,会发现add方法那里会报错,需要提供两个参数,键和值。 ? 难道必须要对得到的 IEnumerator 再用一次 GetEnumerator? ? 实际上大可不必,因为针对这种键值对,我们有一个玩意叫做 IDictionaryEnumerator。看名字就知道它就是为此而生的。 IDictionaryEnumerator ie = dict.GetEnumerator(); while(ie.MoveNext()) { a.Add(ie.Key.ToString(),Convert.ToInt32(ie.Value)); ie.MoveNext(); b.Add(ie.Key.ToString(),Convert.ToInt32(ie.Value)); ie.MoveNext(); c.Add(ie.Key.ToString(),Convert.ToInt32(ie.Value)); } ? 至此我们通过写手动挡的 foreach ,成功的实现了可迭代对象间的赋值。 关于 foreach ? 在C#中 foreach 语句,能够进行比for循环语句更直接和简单的对集合的迭代,编译器会将 foreach 编译来调用 GetEnumerator 和 MoveNext方法以及Current属性。 ? 实际上 foreach 语句编译之后也会产生类似于上面所写 C#迭代法 标签:rem list 也会 有一个 对象 循环语句 目录 key 关于 原文地址:https://www.cnblogs.com/ihdci/p/12642167.html
上一篇:zabbix 部署windos
下一篇:C#显式实现接口