使用通过数据结构中的反射获得的类型?

时间:2015-09-01 19:07:30

标签: c# .net reflection

我有一个.NET {4.6}中存在的类FutureClass,但我希望能够在使用.NET 4.0构建的旧代码库中使用它。我可以获取并调用FutureClass个对象,但我想将它们存储在Dictionary<string, FutureClass>中。

我尝试过以下方法:

Dictionary<string, FutureClass> dict = new Dictionary<string, FutureClass>(); // didn't expect it to work

Type futureClassType = [...] //dynamically load the type from the assembly compiled with .NET 4.6
Dictionary<string, futureClassType> dict = new Dictionary<string, futureClassType>(); // held some promise, I thought

有没有办法做我正在尝试的事情?谢谢!

2 个答案:

答案 0 :(得分:1)

就静态输入您的字典变量而言,我认为您仅限于以下两个选项之一 - 使用Dictionary<string, object>Dictionary<string, dynamic>

否则,您可以这样做:

Type futureClassType = ...;
var dictionaryType = typeof(Dictionary<,>).MakeGenericType(typeof(string), futureClassType);
var dictionary = Activator.CreateInstance(dictionaryType);

但是在这里,生成的dictionary变量是object类型。您可以将其转换为非通用IDictionaryICollectionIEnumerable,但您无法将其转换为上述任何一种形式的通用形式。

答案 1 :(得分:0)

在运行时加载类型有一些严重的障碍,就像你刚刚遇到的那样。您不能在编译时表达式中使用该类型,例如将其用作泛型类型参数。

您唯一的选择是将类复制到您自己的代码库,这应该不会太困难,因为.NET框架现在是官方开源的。您可能遇到的唯一麻烦是该类具有许多.NET&gt; = 4.5依赖项,可能是递归的。