foreach ループ宣言で LINQ を直接宣言するのは悪い習慣ですか? パフォーマンスまたは微妙な動作の違いに関して。
例えば:
foreach (string name in persons.Select(x => x.name))
{
//Do something with name
}
悪い習慣?全くない。
ただし、状況によっては、パフォーマンスが影響を受ける可能性があります。たとえば、次のようになります。
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
}