是否可以转换类型参数?

时间:2012-01-26 12:16:51

标签: c# dictionary casting boxing

根据隐式转换逻辑,它可以实现类似:

string str = "something";
Object o = str ;

我原本期望将Dictionary<string, string>分配给Dictionary<string, Object>是可能的,但事实并非如此。

是否有可能明确地将字符串值强制转换为Object而不必遍历keyValuePair-items?

EDIT1:将所有Boxing / Unboxing单词替换为转换和转换为注释和答案提及此问题Boxing

谢谢大家

3 个答案:

答案 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中,该概念是在inout关键字的帮助下实现的,但通用字典没有改变。

您可以阅读有关协方差和逆变here及其以下部分的更多信息。

答案 2 :(得分:1)

如果有一个只读字典接口IReadableDictionary<TKey, out TValue>IReadableDictionary<TValue>(在索引器中使用类型'Object'),那么需要读取但不能写入的代码是可能的字典接受具有与所需类型兼容的类型的值的任何字典(第二个接口将用于允许想要检索与basicThing的实例相关联的Mammal的实例的代码,以接受事物例如Dictionary<Cat, basicThing>Dictionary<Animal, DerivedThing>)。从Dictionary<TKey, TValue>派生一个类并将这样的接口添加到该类并不困难,但我不知道任何这样的标准接口。 ILookup模糊地相似,但却截然不同。