根据隐式转换逻辑,它可以实现类似:
string str = "something";
Object o = str ;
我原本期望将Dictionary<string, string>
分配给Dictionary<string, Object>
是可能的,但事实并非如此。
是否有可能明确地将字符串值强制转换为Object而不必遍历keyValuePair-items?
EDIT1:将所有Boxing / Unboxing单词替换为转换和转换为注释和答案提及此问题Boxing。
谢谢大家
答案 0 :(得分:3)
Typecasting对你没有帮助,但你可以使用LINQ将其转换为另一个:
Dictionary<string, object> newDict;
newDict = dict.ToDictionary(pair => pair.Key, pair => (object)pair.Value);
答案 1 :(得分:2)
这不是关于拳击,而是关于协方差和逆变。
通用类型参数不是协变的。所以你不能这样做,至少在C#3.0中是这样。在C#4.0中,该概念是在in
和out
关键字的帮助下实现的,但通用字典没有改变。
您可以阅读有关协方差和逆变here及其以下部分的更多信息。
答案 2 :(得分:1)
如果有一个只读字典接口IReadableDictionary<TKey, out TValue>
和IReadableDictionary<TValue>
(在索引器中使用类型'Object'),那么需要读取但不能写入的代码是可能的字典接受具有与所需类型兼容的类型的值的任何字典(第二个接口将用于允许想要检索与basicThing
的实例相关联的Mammal
的实例的代码,以接受事物例如Dictionary<Cat, basicThing>
或Dictionary<Animal, DerivedThing>
)。从Dictionary<TKey, TValue>
派生一个类并将这样的接口添加到该类并不困难,但我不知道任何这样的标准接口。 ILookup
模糊地相似,但却截然不同。