我有一个在。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
有办法做我正在尝试的吗?谢谢!
至于字典变量的静态类型,我认为您只能使用以下两种选择之一——要么使用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
,但不能将其强制转换为上述任何一种的泛型形式。
在运行时加载类型有一些严重的障碍,就像您刚才遇到的那样。在编译时表达式中不能像将其用作泛型类型参数那样使用该类型。
你唯一的选择就是把这个类复制到你自己的代码库中,这应该不会太难,因为。net框架现在已经正式开源了。您可能遇到的唯一问题是,该类有许多. net>= 4.5依赖项,可能是递归的。