如何设置泛型类的基类属性

4

我有一个基类:

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

然后有一个类,该类接收一个泛型类作为参数,其中传递了一个TViewModel,它继承自MyBaseClass。
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);
    }
}

这个代码按照我的要求正常工作。但是一旦我尝试设置基类属性,就会出现编译错误:

对象在该行上不包含MyProperty的定义。

viewModel.MyProperty="test";

如何设置属性?

1个回答

6

请使用通用的Activator.CreateInstance<T>代替:

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);
}

1
谢谢。我犯了一个愚蠢的错误,把它当作了一个对象。 - devfric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接