1

ステートメントList<T>.ForEach()内からループの反復をスキップしたいと思います。if

私はコードを持っています:

        instructions.ForEach(delegate(Instruction inst)
        {                
            if (!File.Exists(inst.file))
            {
                continue; // Jump to next iteration
            }

            Console.WriteLine(inst.file);
        });

ただし、コンパイラーは、ジャンプアウトするものは何もないと述べています(おそらく、ifブロックを囲んでいるブロックとして使用しているように見えますか?)。

とにかく上記を行うことはありますか?parentblock.continue;などのようなもの。

ありがとう

4

4 に答える 4

8

returnの代わりにステートメントを使用してくださいcontinue。ForEach拡張メソッドを使用すると、アイテムごとに関数を実行することに注意してください。アイテムの本体は{と}の間で指定されます。関数を終了すると、リストの次の値に進みます。

于 2012-07-26T15:38:14.763 に答える
5

ForEachこの場合は、リスト内のすべてのアイテムに対してデリゲートを実行するメソッドにすぎません。ループ制御構造ではないため、continueそこに表示することはできません。foreach通常のループとして書き直します。

foreach (var inst in instructions) {
    if (!File.Exists(inst.file))
    {
        continue; // Jump to next iteration
    }

    Console.WriteLine(inst.file);
}
于 2012-07-26T15:38:24.060 に答える
5

LINQのWhere句を使用して、最初から述語を適用します

foreach(Instruction inst in instructions.Where(i => File.Exists(i.file))){
    Console.WriteLine(inst.file);
}
于 2012-07-26T15:41:26.523 に答える
1

ForEach関数に送信されるデリゲートは、命令リストの項目ごとに1回実行されます。1つの項目をスキップするには、デリゲート関数から戻るだけです。

    instructions.ForEach(delegate(Instruction inst)
    {                
        if (!File.Exists(inst.file))
        {
            return; // Jump to next iteration
        }

        Console.WriteLine(inst.file);
    });
于 2012-07-26T15:39:31.210 に答える