ForEachメソッドのcontinueステートメントに相当するものはありますか?
List<string> lst = GetIdList();
lst.ForEach(id =>
{
try
{
var article = GetArticle(id);
if (article.author.contains("Twain"))
{
//want to jump out of the foreach now
//continue; **************this is what i want to do*******
}
//other code follows
}
編集:すべてのすばらしい回答をありがとう。 .foreachは拡張メソッドではないことを明確にしていただきありがとうございます。私はこの構造を使用してコーディングスタイルの一貫性を保ちます(別のプログラマーが同じクラスの別の同様のメソッドに取り組んだ)...そして.foreachの使用を避ける理由へのリンクに感謝します。
個人的には、List<T>.ForEach
ではなく標準のforeachループを使用します。
この場合、目的はreturn
ステートメントを使用することなので、条件を反転させる(その場合のコードを回避する)か、continue
を呼び出すことができます。ただし、break
を使用したい場合、これは機能しません。そうは言っても、かなり List<T>.ForEach
を避ける理由は他にほとんどないため、これを通常のforeachステートメントに切り替えることを検討します。
A)ForEachはLINQではなく、List<T>
のメソッドです。
B)foreachを使用してください。
C)return
がそれを行います。
編集
明確にするために、あなたがやっていることは、リストの各エントリに対して呼び出されるメソッドを提供することです。 return
は、そのメンバーのメソッドに適用されます。リスト内の残りのメンバーは引き続きメソッドを呼び出します。
if
条件を反転するだけです:
lst.ForEach(id => {
var article = GetArticle(id);
if (!article.author.contains("Twain"))
{
// other code here
}
});
使用しているメソッドは List<T>.ForEach
で、これはクラスで定義されたメソッドであり、LINQ拡張メソッドではありません。この質問は、実際にはLINQとは関係ありません。
return;
に渡されたデリゲートのList<T>.ForEach
は、実際のforeach
構成要素でcontinue;
を使用して概算する必要があります。
あなたの質問に答えるには:
_List<string> lst = GetIdList();
lst.ForEach(id =>
{
try
{
var article = GetArticle(id);
if (article.author.contains("Twain"))
goto _continue;
}
//other code follows
_continue:;
}
_
他の答えは正しいです、.ForEach()
は避けてください。goto
も回避する必要がありますが、コードブロックのショートカットに役立つ場合があります。
Foreachを続行すると、ループの先頭までループが戻り、シーケンスの次の項目に戻ります。それが必要な場合は、returnを実行する必要があります。完全に終了したい場合は、Any()のような実際のLINQメソッドを使用して書き直すことができます。