【发布时间】:2017-05-18 07:08:02
【问题描述】:
我正在使用反射来动态创建对象
var type = Type.GetType("Demo.Namespace.AnimalViewModel, Demo.Assembly", true);
var fooType = Type.GetType("Demo.Namespace.Foo, Demo.Assembly", true);
Activator.CreateInstance(type) as AnimalViewModel<fooType>;
得到一个编译错误:
'fooType' 是一个变量,但用作类型。
如何使用 fooType 变量设置 AnimalViewModel 的类型? fooType -> Foo
【问题讨论】:
-
您希望
obj与您的反射版本一起做什么。显示您计划使用的代码示例。 -
可能无法做到您想要的。另一方面,您可以通过让您的视图模型实现
IAnimalViewModel并通过该类型引用它来完成同样的事情。 -
您不能以这种方式使用
fooType。您在< >中放置的内容应该是类型名称,而不是变量——不管它是否是反射。 -
您似乎正试图灵活地动态创建实例并具有严格的类型安全性。我知道实现这一点的唯一方法是定义相关类型实现的接口(或更多)。您可以像现在一样动态地创建实例,但是在进行强制转换时,您将强制转换到接口。然后在代码中你只需要引用接口。
-
另请参阅:stackoverflow.com/questions/223952/…、stackoverflow.com/questions/19555896/… 和 stackoverflow.com/questions/326285/…。请注意,创建实例是一回事。使用它完全是另一回事。您的问题没有解释,即使您创建了这种动态指定的类型,您认为您将如何使用它。
标签: c# generics reflection