C# foreach循环中奇怪的IEnumerable行为

C# foreach循环中奇怪的IEnumerable行为,c#,foreach,iterator,ienumerable,yield-return,C#,Foreach,Iterator,Ienumerable,Yield Return,我有以下方法: public IEnumerable<object> GetParameters(Context context) { yield return new[] { 1, 2, 3 }; } 我希望参数在第一个循环中为1,在第二个循环中为2,在第三个循环中为3,但情况并非如此:( 参数是一个包含所有值的数组 我在这里遗漏了什么???您正在返回可枚举数组的单个实例 你想要: yield return 1; yield return 2; yield return

我有以下方法:

public IEnumerable<object> GetParameters(Context context)
{
    yield return new[] { 1, 2, 3 };
}
我希望参数在第一个循环中为
1
,在第二个循环中为
2
,在第三个循环中为
3
,但情况并非如此:(

参数
是一个包含所有值的数组


我在这里遗漏了什么???

您正在返回可枚举数组的单个实例

你想要:

yield return 1;
yield return 2;
yield return 3;
将您的方法更改为

public IEnumerable GetParameters(Context context)
{
    return new[] { 1, 2, 3 };
}


yield-return
返回单个对象。您似乎正在执行类似于
yield-foreach
的操作,在该操作中,它将生成集合中的每个项目。(这是一个不存在的经常请求的功能。)

你只需要做一些事情,比如:

foreach(int i in new[]{1, 2, 3})
  yield return i;
在可能的情况下,最好使用强类型的
IEnumerable
,在这种情况下,它将是
IEnumerable
。如果这样做,那么在尝试生成集合时,您将得到编译时错误,而不是意外的运行时行为

public IEnumerable GetParameters(Context context)
{
    yield return 1;
    yield return 2;
    yield return 3;
}
foreach(int i in new[]{1, 2, 3})
  yield return i;