一般的に、LinqはVoodomagicではなく、あなたがそれを使用していなかった場合に書く必要がある同じものをフードの下に置きます。有利な
foreach(var entry in _objDictionary.Keys)
{
fooObject foo = entry as fooObject;
if (foo != null)
{
foo .LaunchMissles();
}
}
をLINQのは、単に書くことが、物事が容易になりますが(それは本当に同等であれば)それはあなたのケースでは賢明な
を通常のコードのパフォーマンスを打つ文句を言わない、あなたの「オールドスクール」のアプローチは完全に罰金ですし、私の意見では
Linq-Approachに関して:
上記のコードと同様に、リスト上のメソッドを呼び出すだけで、シーケンスをマテリアライズすると、リソースを無駄にして読みにくくなります。
あなたの例では、diffrenceを作成しませんが、ソースがCollection(Dictionary.Keysのようなもの)ではなく、実際に怠惰な方法で動作するIEnumerableなら、大きな影響があります。
Lazy evalutationは、必要なときにアイテムを生成するように設計されています。ToList inbetweenを呼び出すと、実際にForEachを実行する前にすべてのアイテムが収集されます。 明白なforeachアプローチは1つのアイテムを取得し、それを処理してから次のように取得します。
あなたは本当にまだ
public static class EnumerableExtensionMethods
{
public static void ForEach<T>(this IEnumerable<T> sequence, Action<T> action)
{
foreach(T item in sequence)
action(item);
}
}
次にリスト・インプリメンテーションを使用してはいけないよりも、「LINQの-foreachの」を使用しますが(自分のquesiton以下のコメントで述べたように)自分自身のextensionmethodをロールバックしたい場合あなたが別の方法で「私のために許容される」これを使用する方法のみです
sequence.ForEach(_methodThatDoesThejob);
へのforeach-体を入れない限り、通常のforeachの圧延は、好まれるべきです。
異なるコーディング方法。開発者が各要素をループするのは一種のレガシーな方法です。マイクロソフトのループスルーは現代的な方法です:) – techspider
'このように各ループにaを使用するのとどのように違いますか? 'あなたのバージョンはもっと読みやすくなります..また、良いブログを読むにはhttps://blogs.msdn.microsoft.com/ericlippert/2009/05/18/foreach-vs-foreach/ – Eser
それはスタイルの違い以上のものではありません。 – AntiTcb