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



我有一个在。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类型的。您可以将其强制转换为非泛型的IDictionaryICollectionIEnumerable,但不能将其强制转换为上述任何一种的泛型形式。

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

你唯一的选择就是把这个类复制到你自己的代码库中,这应该不会太难,因为。net框架现在已经正式开源了。您可能遇到的唯一问题是,该类有许多. net>= 4.5依赖项,可能是递归的。

相关内容

  • 没有找到相关文章

最新更新