如何从这种通用情况中获取类型?

时间:2011-11-05 17:08:05

标签: c# generics

我试图编写一个通用基类,它允许子类传递一个接口作为类型,然后在泛型上有基类调用方法,但我不知道怎么做...

public class BaseController<T> : Controller where T : IPageModel
{
    public virtual ActionResult Index()
    {
        IPageModel model = new T.GetType();

        return View(model);
    }
}

那不能编译,在涉及泛型时,我是否得到了错误的结论?

2 个答案:

答案 0 :(得分:6)

我想你想要:

public class BaseController<T> : Controller where T : IPageModel, new()
{
    public virtual ActionResult Index()
    {
        IPageModel model = new T();
        return View(model);
    }
}

请注意new()上的T约束。 (有关详细信息,请参阅MSDN on generic constraints。)

如果您 需要TypeT相对应的参考,那么您将使用typeof(T) - 但我认为您不需要情况下。

答案 1 :(得分:1)

您应该如下所示启用创建实例:

public class BaseController<T> : Controller where T :IPageModel,new()
{
    public virtual ActionResult Index()
    {
        IPageModel model = new T();

        return View(model);
    }

}