IEnumerableはここで何度か議論されていますが、私は特定の質問に対する答えを見つけることができませんでしたので、私は新しい質問としてそれを取り上げています。これは「testlistという」の「フィルタ」だけではなく二つのアイテムを2回反復するが、実際にアイテムを引き起こすことを、IEnumerableの複数の列挙
static void Main(string[] args)
{
List<string> testList = new List<string> {"Test", "Test1", "Test1"};
IEnumerable<string> filtered = testList.Where(x => x == "Test1");
DoSomeWork(filtered);
DoSomeMoreWork(filtered);
}
public static void DoSomeWork(IEnumerable<string> items)
{
foreach (var item in items)
{
Console.WriteLine("do some work");
}
}
public static void DoSomeMoreWork(IEnumerable<string> items)
{
foreach (var item in items)
{
Console.WriteLine("do some more work");
}
}
は、右のIアム:
は、次のコードを考えてみましょうか?したがって、 "testList"は10000個のアイテムを持つ大きなリストであり、 "filtered"は10個のアイテムに減らすことを考慮すると、リストを "フィルタリング"する(別名varを使用し、最後にToList()を追加する)
編集: これは私がこれまでに尋ねた中で最も恥ずかしい質問です。たとえば、IQueryableを反復することが悪いことは、DBからデータを2回取得することになるためです。しかし、私はメモリリストについては確かではありませんでした。私は;-) ultimatly IEnumrableから継承され
はい、わかっています。しかし、問題はです。DoSomeWork()とDoSomeMoreWork()の両方が大きなリストを反復させるか、サブセットのみを反復しますか? – Christoph
@Christoph - 答えが今編集されました..... –
この使用のためにToListを使用するほうが効率的ですが、最も重要なことに、追加/削除を許可しないため、不要な柔軟性が回避されますバグなど)。 –