[ad_1]
こんにちは、C# でまた奇妙な問題が発生しました。IEnumerable のメソッド “Count” と List の “Count” プロパティが InvalidCastException を発生させるというものです。 この問題についてはあまり明確ではないかもしれないので、例外が発生するコード部分を示します。
int count = items.Count(); // The method raises an InvalidCastException
。
私が試したこと:
私の問題をグーグルで調べましたが、他の人にとっては、ある型から別の型にキャストしようとしているためにのみ問題が発生しますが、私にとっては、IEnumerable の Count メソッドと List の Count プロパティだけが原因です。
また、IEnumerable を List に変換してから、その Count プロパティを使用してみました。
int count = items.ToList().Count // The property now also raises an InvalidCastException
最初はうまくいきましたが、その後はうまくいきませんでした。
IEnumerable を反復する以外に選択肢はないと思います。 IEnumerable に含まれる要素の数を取得するためだけに IEnumerable 全体を反復処理するよりも優れた解決策がある場合、これは非常に良いでしょう。
この問題にご注目いただきありがとうございます。
解決策 1
それは正しいです、 IEnumerable
サポートしません Count
財産。 IEnumerable
コレクションの反復のみをサポートします。
そのプロパティをサポートする型にキャストする必要があります。 の ICollectionCount
財産。
以下に例を示します。
IEnumerable <string> names = new List<String>() { "John", "Paul", "Ringo", "George" }; ICollection<string> collection = names as ICollection<string>; int count = collection.Count; Console.WriteLine(count);
出力は次のとおりです: 4
解決策 2
それは私が得たものではありません:
List<string> itemsAsList = new List<string> { "one", "two", "three" }; IEnumerable<string> items = itemsAsList; int count = items.Count(); Console.WriteLine(count); count = items.ToList().Count; Console.WriteLine(count); count = items.ToList().Count(); Console.WriteLine(count); count = itemsAsList.ToList().Count; Console.WriteLine(count); count = itemsAsList.ToList().Count(); Console.WriteLine(count); count = itemsAsList.Count; Console.WriteLine(count); count = itemsAsList.Count(); Console.WriteLine(count);
くれます
3 3 3 3 3 3 3
それは私が期待していた通りです。
したがって、最初に行うことは、デバッガを使用して正確に何を行うかを調べることをお勧めします。 items
が含まれています – 私はそれがあなたが考えているものではないと思います。
[ad_2]
コメント