【发布时间】:2016-05-06 15:12:15
【问题描述】:
假设我们有一个实现IDictionary<string, string> 的类型。它叫MyStringDictionary。
我正在做一些属性/字段/方法反射,并想知道该成员是否是我可以转换为 IDictionary<string, object> 的类型。
我知道typeof(IDictionary<string, string>).IsAssignableFrom(typeof(MyStringDictionary)) 将是真的,因为两个通用参数都匹配。但是,我不会直接分配给<string, string>,而是会转换为<string, object>,如下所示:
public class MyStringDictionary : IDictionary<string, string> {
// Notice that the class itself has no generic type arguments!
}
MyStringDictionary myStringDict = GetBigDictionary();
IDictionary<string, object> genericDict = myStringDict
.ToDictionary(kvp => kvp.Key, kvp => (object) kvp.Value);
我如何确定这种转换是可能的?
我在想我可以看看它是否实现了IEnumerable<KeyValuePair<,>>,但我又一次被我不知道Value 的类型参数的事实所困扰,也不需要知道因为它只会被装箱到object。
【问题讨论】:
-
哇,-1 已经是,发布后 0.2 秒!?!?!
-
@GrantWinney 我什至没有机会看到“0”:提交时,它已经有了-1。如果是你投票给我,谢谢!
标签: c# generics reflection type-conversion