IDictionary的,字典
-
21-08-2019 - |
题
我有:
IDictionary<string, IDictionary<string, IList<long>>> OldDic1;
(只是为了说明的目的,它被实例化,并且具有值 - 别处)
我为什么能做到这一点:
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。所以,问题是,为什么我不能从接口类型投呢?是存在的溶液中,然后其他改变它是如何存储在第一地点?
解决方案
可以仅重新施放的最外界面/类名称,而不是通用的参数。你的第二个投不工作的原因是,你不能从一个数组类型转换为另一种,即使你可以施放“载”对象一样的道理。这里的原因:
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 ROH!
因此,当你有容器可以从IList<X>
改变只要List<X>
是的相同强>对于每个到X
和背部。
不隶属于 StackOverflow