【问题标题】:How to set the base class property of a generic class如何设置泛型类的基类属性
【发布时间】:2016-06-02 22:28:50
【问题描述】:

我有一个基类:

public abstract class MyBaseClass
{
    public string  MyProperty { get; set; } 
}

然后是一个通过泛型类的类,该类通过一个继承自 MyBaseClass 的TViewModel

public abstract class MyGenericController<TViewModel> : Controller
    where TViewModel :  MyBaseClass
{
    public virtual async Task<IActionResult> Index()
    {
        object viewModel = Activator.CreateInstance(typeof(TViewModel));
        viewModel.MyProperty="test";
        return View(viewModel);
    }
}

这就像我想要的那样工作。但是,一旦我尝试设置基类属性,就会出现编译错误:

object 不包含 MyProperty 的定义 就行了

viewModel.MyProperty="test";

如何设置属性?

【问题讨论】:

    标签: c# generics


    【解决方案1】:

    改用通用的Activator.CreateInstance&lt;T&gt;

    public virtual async Task<IActionResult> Index()
    {
        TViewModel viewModel = Activator.CreateInstance<TViewModel>();
        viewModel.MyProperty="test";
        return View(viewModel);
    }
    

    另一种方法也可以通过TViewModel : MyBaseClass, new() 约束泛型类型参数(这样可以节省反射的开销)以包含默认构造函数,然后:

    public virtual async Task<IActionResult> Index()
    {
        TViewModel viewModel = new TViewModel();
        viewModel.MyProperty="test";
        return View(viewModel);
    }
    

    【讨论】:

    • 谢谢。愚蠢的错误我把它当作一个对象。
    猜你喜欢
    • 2020-08-06
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多