なぜ私はちょうどキャストできないのだろうと思っています(私は曖昧な考えを持っていますが、それはその共変のものと何か関係がありますか?)、そして最初の辞書の要素を新しいもの私が望むタイプを得るためには?ディクショナリ<T1、IEnumerable <T2>>にディクショナリ<T1, List<T2>をキャストできないのはなぜですか?
答えて
これは同じタイプではないため、実行できません。検討:
var x = new Dictionary<string, List<int>>();
// won't compile, but assume it could...
Dictionary<string, IEnumerable<int>> xPrime = x;
// uh oh, would allow us to legally add array of int!
xPrime["Hi"] = new int[13];
これは意味がありますか? Dictionary<string, List<int>>
はTValue
がList<int>
であることを示しています。つまり、Add()
の値をList<int>
とすることができます。あなたはDictionary<string, IEnumerable<int>>
にこれをキャストすることができれば、それは値型を意味するであろうことは、あなたに意味するでしょうIEnumerable<int>
である可能性Add()
任意の元の型に違反するIEnumerable<int>
(int[]
、HashSet<int>
、など)。
ので、List<T>
はIEnumerable<T>
を実装List<T>
のでIEnumerable<T>
参照に変換することができますが、それはDictionary<TKey, List<TValue>>
実装/はDictionary<TKey, IEnumerable<TValue>>
を拡張することを意味するものではありません。
もっと簡単に言えば:後者はあなたが猫、リスを追加できるようになるので
Dictionary<int, Dog>
は
Dictionary<int, Animal>
に変換できません、など
意味があります。私はコピーを作成します(私は実際に結果のコレクションを変更することはしませんが、型システムはそれを知らない)。 –
JCooper:上記のpstのように、LINQを使用すると、 'Dictionary
はい、共分散の問題です。私はこれが.net 4.0で修正されたと信じています。
JasonMeckley:リスト
@JamesMichaelHareに辞書
心配はいりません。微妙なことを完全に見るにはしばらく時間がかかりました。 –
あなたはキャストすることはできません、まだあるからDictionary<T1, List<T2>>
いいえ、
0それは非常に頻繁に問題だとしてDictionary<string, List<int>> d1 = new Dictionary<string, List<int>>();
Dictionary<string, IEnumerable<int>> d2 = (Dictionary<string, IEnumerable<int>>)d1; // this is the invalid cast
d2["one"] = new int[0]; // valid for d2
List<int> list1 = d1["one"]; // would fail
- 1. タプル<T1,T2>とKeyValuePairの間の変換<T1, T2>
- 2. タプルはどうですか<T1,T2>。<T1,T2>(T1アイテム1、T2アイテム2)を作成しますか?
- 3. IEnumerable <struct>をIEnumerable <object>としてキャストできないのはなぜですか?
- 4. std :: vectorから要素を移動する<T1>からstd :: vector <std :: pair <T1,T2>>
- 5. ディクショナリ<string、city>
- 6. なぜ次関数tのタイプがあり、この関数は<code>t -> (t -> t1) -> t1</code>タイプを持っていない理由
- 7. IEnumerable <T>リストをバインドリスト<t>にキャストできないのはなぜですか?
- 8. Linq - 式<T1>を式<T2>から作成する
- 9. Linqのディクショナリ<int、Dictionary <int, Foo>>をIEnumerable <IEnumerable <Foo>>に変換する最も簡単な方法は?
- 10. .NET MVCビューページ<T1>とViewUserControl <T2>行動
- 11. IEnumerable.Empty <T>()で、IEnumerableでないのはなぜですか?<T> .Empty()?
- 12. ディクショナリでキーによるディクショナリ<TKey、TValue>の順序はありますか?
- 13. `IEnumerable <Unknown T>`を `IEnumerable <Whatever>`にキャストする方法
- 14. IEnumerable <Object>からIEnumerableへのキャスト<string>
- 15. タイプ<T1>のオブジェクトから<T>のオブジェクトを作成するコンストラクタ
- 16. IEnumerableからIEnumerableへのキャスト<object>
- 17. C#でMutableTuple <T1,T2,TEtc>クラスを作成しないでください。
- 18. 文字列の最後にAM/PMを持つタイムスタンプをどのように変換しますか?</p> <pre><code>t1 <- as.POSIXct(t1, format="%d-%b-%y %H:%M:%S") </code></pre> <p>whouldこの変換このタイムスタンプ右:
- 19. ElasticSearch - ディクショナリ<オブジェクト、オブジェクト>のホワイトスペースアナライザ
- 20. 読み取り専用ディクショナリ<int、List <int>>
- 21. キャストIEnumerable <T>ランタイムタイプ
- 22. Rhino Mocks:パラメータの1つがExpression <Func<T1, T2>>の場合、Stub()を使用できますか?
- 23. Iterable <DeclarationMirror>をIterable <MethodMirror>にキャストできないのはなぜですか?
- 24. テンプレート<typename T1、typename T2>からテンプレート<typename T1、int i>へのクラス特殊化がサポートされない理由
- 25. INSERTは、どのように私は<code>t1_has_t2.data</code>を追加または更新しない、<code>t.id</code>、<code>a.id</code>、<code>t1.name</code>と<code>t2.name</code>考える
- 26. ディクショナリはどこですか。<,> .SetCapacity(int newCapacity)?
- 27. IEnumerableをにキャストする<T>
- 28. リスト<int>からIEnumerable <IComparable>
- 29. 入れ子のインターフェイス:IDictionary <TKey、IEnumerable <TValue>>にIDictionary <TKey、IList <TValue>>をキャストしますか?
- 30. LINQ ToListがここで使用されないのはなぜですか? <code>source</code>が<code>IEnumerable<T></code>ある</p> <pre><code>using(var iterator = source.GetEnumerator()) {...} </code></pre> <p>:
..あなたはおそらく正しく辞書を<>使用していない、あなたのコード例を貼り付け.. – MethodMan
は、これは何回も回答されています。短い答えは、Dictionary>を参照するとT2 []配列を追加することができるため、型がDictionary > –
@James Michael Hareのように正しくないためです。重複して申し訳ありません。誰かがそれを閉じると確信しています。 –