6

foreach ループ宣言で LINQ を直接宣言するのは悪い習慣ですか? パフォーマンスまたは微妙な動作の違いに関して。

例えば:

foreach (string name in persons.Select(x => x.name))
{
    //Do something with name
}
4

2 に答える 2

3

悪い習慣?全くない。

ただし、状況によっては、パフォーマンスが影響を受ける可能性があります。たとえば、次のようになります。

persons.Select(x => x.name).Select(x => x.name + " more");

これよりもパフォーマンスが向上する可能性があります。

foreach(string name in persons.Select(x => x.name))
{
    someList.Add(name + " more");
}

...name + " more"最初の例のローカルメモリに対してデータベース側で発生するEntity Frameworkのようなものを使用している場合。

私の意見では、ベストプラクティスは、最も読みやすいものを使用することです。パフォーマンスの問題が発生した場合は、プロファイリング/微調整を行うことができます。LINQ を使用して IEnumerable を構築する方が明確な場合もありますが、foreach を使用してトリッキーなことを行うこともあります。ただし、LINQ の部分が長くなりすぎる場合は、次のようにします。

var somethings = something.Where(x => x == 1).Where(...).GroupBy(...etc);
foreach(var something in somethings)
{
    // Do something
}
于 2013-06-03T01:38:21.270 に答える