2

我有以下方法:

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是一个包含所有值的数组!

我在这里想念什么?

4

3 回答 3

5

您将返回可枚举数组的单个实例。

你要:

yield return 1;
yield return 2;
yield return 3;
于 2012-07-11T15:45:30.057 回答
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;
}
于 2012-07-11T15:45:31.987 回答
3

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

您只需要执行以下操作:

foreach(int i in new[]{1, 2, 3})
  yield return i;

在可能的情况下最好使用强类型IEnumerable,在这种情况下是IEnumerable<int>. 如果你这样做了,那么当你尝试产生一个集合而不是意外的运行时行为时,你会得到一个编译时错误。

于 2012-07-11T15:46:22.007 回答