2011-12-20 17 views
9

リスト<KeyValuePair <...,...>>をIEnumerable <object>に変換できませんか?このような何かしようとすると、InvalidCastExceptionが取得

IEnumerable<object> test = (IEnumerable<object>)new List<KeyValuePair<string, int>>(); 

しかしを、この行った作業:

IEnumerable<object> test = (IEnumerable<object>)new List<Dictionary<string, int>>(); 

そう大きな違いは何ですか? KeyValuePairをオブジェクトに変換できないのはなぜですか?

更新は:それはクラス構造体ではなく、ので

object test = (object)KeyValuePair<string,string>; 

答えて

17

KeyValuePair<K,V>はクラスではないので、あります構造体。 IEnumerable<object>のリストには、各キーと値のペアを取ると、それをボックスに持っていることを意味する変換するには:

IEnumerable<object> test = new List<KeyValuePair<string, int>>().Select(k => (object)k).ToList(); 

を使用すると、リスト内の各項目を変換する必要があり、あなたは単純にキャストすることにより、これを行うことはできませんリスト自体。

2

KeyValuePairは構造体であり、クラスオブジェクトから継承しません。

3

最初にDictionaryは既にKeyValuePairsのコレクションです。したがって、2番目の例では、Dictionary全体をKeyValuePairsではなくオブジェクトにキャストしています。とにかく

、あなたがリストを使用したい場合は、あなたがオブジェクトにKeyValuePair構造を変換するために、キャストメソッドを使用する必要があります。

IEnumerable<object> test = (IEnumerable<object>)new List<KeyValuePair<string, int>>().Cast<object>(); 
関連する問題