创建泛型类型的实例

时间:2014-09-08 11:41:33

标签: c# activator

我创建了一个如下所述的每个助手:http://haacked.com/archive/2011/04/14/a-better-razor-foreach-loop.aspx/

现在有一个商业规则,当没有项目时,创建一个虚拟项目,以便循环执行一次。在foreach声明下面我添加以下内容:

if (!items.Any()) {
    var result = template(new IndexedItem<T>(1, ???));
    result.WriteTo(writer);
}

//Fixed by doing:
var result = template(new IndexedItem<T>(1, default(T)));

问题标记我想要创建一个类型为T的虚拟对象,在搜索时我发现了Activator.CreateInstance()但是我无法使其工作。

我遇到的问题,首先是这是解决问题的最佳方法,一旦创建一个像上面建议的虚拟对象就执行它。如果是这样,我将如何创建虚拟对象呢?

1 个答案:

答案 0 :(得分:4)

一种方法是在T使用new约束。因此,例如,定义class的{​​{1}}或method需要添加如下约束:

T

请注意,必须where T : new() 上设置无参数构造函数,不能T

  

新约束指定泛型类声明中的任何类型参数都必须具有公共无参数构造函数。要使用新约束,类型不能是抽象的。