3

私は延期された実行の土地で少し迷っています:

IEnumerable 実装クラスのインスタンスを宣言します

var wordEnumerable = new WordEnumerable(_text);

次に、それを繰り返します(最初の単語は「Lorem」です)

foreach (var word in wordEnumerable)
                    Console.WriteLine(word);

.. コンソールに書き込まれます。

その後、コードで私は

Console.WriteLine(wordEnumerable.Any(w => w == "Lorem"));

..出力として False を取得します。

ここで、.Any(..) 部分を foreach ループの上に置くと、true になりますが、ループは 2 番目の単語から始まります。

私の期待は、.NetがIEnumerableとその基礎となるIEnumeratorへの呼び出しごとに異なるランタイム「コンテキスト」を作成するため、それらが干渉しないことでした...適切な結果?

ここで何が欠けていますか?

更新

.. 基本的には、特定の文字列内の単語を反復処理できる IEnumerable です。

4

1 に答える 1

3

あなたの期待は正しいです -新鮮な を取得するために再度Any呼び出します。正しく実装されていれば問題ありません。私の推測では、あなたの実装は正しくありません。コードを投稿してください:)GetEnumeratorIEnumerator<T>IEnumerable<T>WordEnumerable

次のように書くとどうなりますか。

Console.WriteLine("First");
foreach (var word in wordEnumerable)
{
    Console.WriteLine(word);
}

Console.WriteLine("Second");
foreach (var word in wordEnumerable)
{
    Console.WriteLine(word);
}

? チェックするもう 1 つのことは、ではなくWordEnumerable実装することです。そうしないと、チェックは参照 ID チェックになります。IEnumerable<string>IEnumerable<object>==

于 2011-02-07T13:09:50.093 に答える