IDictionary,辞典-事典
-
21-08-2019 - |
質問
い:
IDictionary<string, IDictionary<string, IList<long>>> OldDic1;
(イラスト目的で、インスタンス化や価値観-else)
できないのはなぜでいます:?
Dictionary<string, IDictionary<string, IList<long>>> dic1 =
OldDic1 as Dictionary<string, IDictionary<string, IList<long>>>;
基本的にはdic1を実行した後、この線はすべての値からOldDic1;ます。
しかし私はこの:
Dictionary<string, Dictionary<string, List<long>>> dic1 =
OldDic1 as Dictionary<string, Dictionary<string, List<long>>>;
を取得しまnullの場合、ってはお入れすることができない鋳物を除くな衝突ではなくnullを返します。ではなぜできないキャストからのインタフェースのか。ある溶液、その他その変化にどのように格納されたのでしょうか。
解決
あなただけの最も外側のインタフェース/クラス名ではなく、一般的なパラメータを再キャストすることができます。 2番目のキャストが動作しない理由は、あなたが「含まれる」オブジェクトをキャストすることができても、別の配列型からキャストすることはできません同じ理由です。その理由は次のとおりです。
List<object> objects;
List<string> strings;
objects = strings as List<object>;
// Uh oh, that's not a string!
objects.Add(42);
objects = new List<object> { "The", "answer", "is", 42 };
// Uh oh, now strings contains an integer?
strings = objects as List<string>;
同じことがあなたの第二の場合に起こるでしょう。あなたが実際にIDictionary
されていないOldDic1
するDictionary
のいくつかの種類を追加することができ、その後、dic1
は爆破でしょう。これは、非Dictionary
値を持っているでしょう。 RUH盧!
だから、あなたは限りIList<X>
がそれぞれのための同じのあるとしてバックList<X>
とするX
から変更することができます。
他のヒント
の挙動に関する キーワード クライアントまで、フルのC#.辞書は同じものではありませんとしてIDictionary.
また鋳物のできる場合もありますが、いずれかで、次のバージョンです。純増の支援 共分散とcontravariance.
を解決するため なぜ に必要なキャストコンクリートの辞書リストの場合は、その後変更の保存の型です。
所属していません StackOverflow