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

发布于 2024-12-13 14:46:41 字数 321 浏览 0 评论 0原文

我试图编写一个泛型基类,它允许子类传递一个接口作为类型,然后让基类在泛型上调用方法,但我不知道如何做到这一点......

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

        return View(model);
    }
}

这不能编译,在仿制药方面我是否搞错了?

Im trying to write a generic base class that will allow sub classes to pass up an interface as the type and then have the baseclass call methods on the generic but I cant't work out how to do it...

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

        return View(model);
    }
}

That doesn't compile, have I got the wrong end of the stick when it comes to generics?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

话少情深 2024-12-20 14:46:41

我想你想要:

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

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

如果您确实需要与 T 相对应的 Type 引用,您可以使用 typeof(T) - 但我不认为在这种情况下你需要它。

I think you want:

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

Note the new() constraint on T. (See MSDN on generic constraints for more information.)

If you did need the Type reference corresponding to T, you'd use typeof(T) - but I don't think you need it in this case.

策马西风 2024-12-20 14:46:41

您应该执行以下操作才能启用创建实例:

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

        return View(model);
    }

}

You should do as bellow to enable creating instance:

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

        return View(model);
    }

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文