我有一个接受一个视图模型的方法。我必须为不同的viewmodel复制相同的方法。我试过像functionname(t model)这样的东西,但它没有用。我是泛型的新手。 有人可以帮助我
private void SetUpUserTypeDropDown(RegisterViewModel model)
{
var usertypes = GetuserTypes();
model.UserTypes = new List<SelectListItem> { };
usertypes.ForEach(t => model.UserTypes.Add(new SelectListItem() { Text = t.Text, Value = t.Value }));
}
private void SetUpUserforBackOfficeTypeDropDown(BackOfficeViewModel model)
{
var usertypes = GetuserTypes();
model.UserTypes = new List<SelectListItem> { };
usertypes.ForEach(t => model.UserTypes.Add(new SelectListItem() { Text = t.Text, Value = t.Value }));
}
private void SetUpProfileTypeDropDown(MyProfileViewModel model)
{
var usertypes = GetuserTypes();
model.UserTypes = new List<SelectListItem> { };
usertypes.ForEach(t => model.UserTypes.Add(new SelectListItem() { Text = t.Text, Value = t.Value }));
}
我被迫复制粘贴使用不同方法名称的相同代码。我可以在这方面得到一些帮助,如何制作一个将输入视图模型作为通用输入的通用方法
答案 0 :(得分:2)
由于您的所有*ViewModel
- 类都有UserTypes
类型List<SelectListItem>
的属性,因此您可以考虑为所有*ViewModel
创建基类:
public class ViewModelBase
{
public List<SelectListItem> UserTypes { get; set; }
// ... further code?
}
并从该类继承您的视图模型,例如:
public class RegisterViewModel : ViewModelBase
{
// implement specific behaviour
}
然后您的方法不需要是通用的,但可以简单地将ViewModelBase
作为参数:
private void SetUpUserType(ViewModelBase model)
{
var usertypes = GetuserTypes();
model.UserTypes = new List<SelectListItem> { };
usertypes.ForEach(t => model.UserTypes.Add(new SelectListItem() { Text = t.Text, Value = t.Value }));
}
为了完整起见,您可以使此方法具有通用性:
private void SetUpUserType<T>(T model) where T : ViewModelBase
{
var usertypes = GetuserTypes();
model.UserTypes = new List<SelectListItem> { };
usertypes.ForEach(t => model.UserTypes.Add(new SelectListItem() { Text = t.Text, Value = t.Value }));
}
并使用约束(where T : ViewModelBase
)确保它是从支持该ViewModelBase
属性的UserTypes
派生的类型。