我有以下方法:
public IEnumerable<object> GetParameters(Context context)
{
yield return new[] { 1, 2, 3 };
}
当我遍历此枚举时:
foreach (var parameter in GetParameters())
{
// Do something here with parameter
}
我希望参数在第一个循环时为1
,在第二个2
和第三个3
处为parameter
,但事实并非如此:(
{{1}}是一个包含所有值的数组!
我在这里缺少什么?
答案 0 :(得分:5)
您将返回可枚举数组的单个实例。
你想:
yield return 1;
yield return 2;
yield return 3;
答案 1 :(得分:3)
将您的方法更改为
public IEnumerable GetParameters(Context context)
{
return new[] { 1, 2, 3 };
}
或
public IEnumerable GetParameters(Context context)
{
yield return 1;
yield return 2;
yield return 3;
}
答案 2 :(得分:3)
yield return
返回单个对象。你似乎正在尝试像yield foreach
那样产生集合中每个项目的东西。 (这是一个经常被请求的功能,不存在。)
您只需要执行以下操作:
foreach(int i in new[]{1, 2, 3})
yield return i;
最好尽可能使用强类型IEnumerable
,在这种情况下它应为IEnumerable<int>
。如果您这样做,那么当您尝试生成集合而不是意外的运行时行为时,您将收到编译时错误。