Mar*_*ark 35 c# ienumerable yield-return
我必须在这里找到一些简单的东西.
请使用以下代码:
public IEnumerable<int> getInt(){
for(int i = 0; i < 10; i++){
yield return i;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以这样称呼:
foreach (int j in obj.getInt()){
//do something with j
}
Run Code Online (Sandbox Code Playgroud)
如何在没有foreach循环的情况下使用getInt方法:
IEnumerable<int> iter = obj.getInt();
// do something with iter ??
Run Code Online (Sandbox Code Playgroud)
谢谢.
EDITS
对于那些想知道为什么我想要这个的人.我正在迭代两件事:
IEnumerator<int> iter = obj.getInt().GetEnumerator();
foreach(object x in xs){
if (x.someCondition) continue;
iter.MoveNext();
int n = iter.current();
x.someProp = n;
etc...
}
Run Code Online (Sandbox Code Playgroud)
CMS*_*CMS 60
您可以Enumerator使用该GetEnumerator方法获取对该方法的引用,然后您可以使用该MoveNext()方法继续前进,并使用该Current属性访问您的元素:
var enumerator = getInt().GetEnumerator();
while(enumerator.MoveNext())
{
int n = enumerator.Current;
Console.WriteLine(n);
}
Run Code Online (Sandbox Code Playgroud)
Eri*_*ert 31
我的建议是:不要乱搞普查员.将您的问题描述为序列上的一系列操作.编写代码来表达这些操作.让序列运算符负责管理枚举器.
所以让我们看看我是否已经做到这一点.你有两个序列.让我们说{2,3,5,7,12}和{"青蛙","蟾蜍"}.你想要执行的逻辑操作是,"通过第一个序列.每次你找到一个可被3整除的数字,得到第二个序列中的下一个项目.用结果(数字,两栖)对做一些事情."
轻松完成.首先,过滤第一个序列:
var filtered = firstSequence.Where(x=>x%3 == 0);
Run Code Online (Sandbox Code Playgroud)
接下来,使用第二个序列压缩过滤后的序列:
var zipped = filtered.Zip(
secondSequence,
(y, z)=> new {Number = x, Amphibian = y});
Run Code Online (Sandbox Code Playgroud)
现在,您可以遍历压缩序列并使用对执行任何操作:
foreach(var pair in zipped)
Console.WriteLine("{0} : {1}", pair.Number, pair.Amphibian);
Run Code Online (Sandbox Code Playgroud)
简单易玩,没有与调查员混淆.
这个怎么样?
IEnumerator<int> iter = obj.getInt();
using(iter) {
while(iter.MoveNext()) {
DoSomethingWith(iter.Current)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
49443 次 |
| 最近记录: |