2

私は次の方法を持っています:

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

この列挙をループすると:

foreach (var parameter in GetParameters())
{
    // Do something here with parameter
}

パラメータ1は最初のループ、22番目と33番目のループにあると思いますが、そうではありません:(

ここに画像の説明を入力してください

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単一のオブジェクトを返します。yield foreachコレクション内の各アイテムを生成するようなものを実行しているようです。(これは頻繁に要求される機能であり、存在しません。)

次のようなことをする必要があります。

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

またIEnumerable、可能な場合は強く型付けされたものを使用することをお勧めします。この場合はですIEnumerable<int>。これを行った場合、予期しない実行時の動作ではなく、コレクションを生成しようとすると、コンパイル時エラーが発生します。

于 2012-07-11T15:46:22.007 に答える