gpt4 book ai didi

c# - 如何设置泛型类的基类属性

转载 作者:行者123 更新时间:2023-11-30 14:26:21 24 4
gpt4 key购买 nike

我有一个基类:

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 does not contain a definition for MyProperty on the line

viewModel.MyProperty="test";

如何设置属性?

最佳答案

使用通用 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);
}

关于c# - 如何设置泛型类的基类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35537671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com