C# で次のオブジェクトがある場合:
IEnumerable<Product> products;
そして、含まれている要素の数を取得したい場合は、次を使用します。
int productCount = products.Count();
しかし、VB.NET にはそのようなメソッドはないようです。VB.NETで同じ結果を達成する方法を知っている人はいますか?
C# で次のオブジェクトがある場合:
IEnumerable<Product> products;
そして、含まれている要素の数を取得したい場合は、次を使用します。
int productCount = products.Count();
しかし、VB.NET にはそのようなメソッドはないようです。VB.NETで同じ結果を達成する方法を知っている人はいますか?
Count
VB.NET で利用できます。
Dim x As New List(Of String)
Dim count As Integer
x.Add("Item 1")
x.Add("Item 2")
count = x.Count
Count()
.net の以降のバージョンでは、 associated withと呼ばれる拡張メソッドがあります。これは、基になる列挙子がこれらのいずれかをサポートしている場合はorIEnumerable<T>
を使用し、サポートしていない場合はアイテムを繰り返しカウントします。IList<T>.Count()
ICollection.Count()
これに関して常に考慮されるとは限らない重要な注意点:IEnumerable<DerivedType>
一般に は の代わりに使用できますが、 を実装するが実装しないIEnumerable<BaseType>
型は、として使用すると効率的にカウントされますが、 としてキャストすると効率的にカウントされません(クラスがメソッドをサポートしている場合でも)。正しい結果が返されても、システムはそれを探しません。代わりに、実装されないものを探します。IList<DerivedType>
ICollection
IEnumerable<DerivedType>
IEnumerable<BaseType>
IList<DerivedType>.Count()
IList<BaseType>
一般に、IEnumerable は、基になるコレクション (List など) がサポートされていない限り、Count を持ちません。
ジェネリック IEnumerable が Count メソッドを実装するために何が必要かを考えてみてください。IEnumerable はデータが要求されたときにのみ実行されるため、Count を実行するには、見つかった要素の数を追跡しながら最後まで反復する必要があります。
通常、この反復は終了しますが、永久にループするクエリをセットアップできます。Count は、時間的に非常にコストがかかるか、IEnumerable では危険です。