我有一个.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
有没有办法做我正在尝试的事情?谢谢!
答案 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类型。您可以将其转换为非通用IDictionary
,ICollection
或IEnumerable
,但您无法将其转换为上述任何一种形式的通用形式。
答案 1 :(得分:0)
在运行时加载类型有一些严重的障碍,就像你刚刚遇到的那样。您不能在编译时表达式中使用该类型,例如将其用作泛型类型参数。
您唯一的选择是将类复制到您自己的代码库,这应该不会太困难,因为.NET框架现在是官方开源的。您可能遇到的唯一麻烦是该类具有许多.NET&gt; = 4.5依赖项,可能是递归的。