【发布时间】:2016-10-06 07:36:50
【问题描述】:
我想实例化一个新对象,其中类型和泛型类型被定义为变量。最终结果可能类似于此处手动创建的 newListOfObjects:
var newListOfObjects = new List<TabViewModel>();
其中 TabViewModel 是以下对象:
public class TabViewModel
{
public string Title { get; set; }
public int TabOrder { get; set; }
}
问题出现在尝试仅使用变量实例化新对象时。我们有一个泛型类型变量 genericType,它是一个接口和一个类型参数列表 listOfTypeArgs。在上面的示例中,泛型类型是 IList,参数是 TabViewModel。然后看起来如下(注意,为了便于理解,有些代码是伪代码):
Type genericType = IList'1;
Type[] listOfTypeArgs = TabViewModel;
var newObject = Activator.CreateInstance(genericType.MakeGenericType(listOfTypeArgs));
很明显,我收到错误“System.MissingMethodException”,并指出我无法从接口实例化变量。
如何将界面转换为其代表,以便我可以 实例化新对象?
注意:我无法更改 Type genericType = IList'1;也不 Type[] listOfTypeArgs = TabViewModel;
【问题讨论】:
-
这个
Type genericType = IList'1;和这个Type[] listOfTypeArgs = TabViewModel;不是有效的C# 语法。贴出实际代码! -
在这种情况下,获取 IList 和 TabViewModel 类型的有效代码无关紧要。
-
如果您选择忽略 user3185569 的请求,您可能会在再次发布之前阅读stackoverflow.com/help/mcve。
标签: c# variables object generics instantiation