[英]Create a Generic Method For multiple like classes
我正在尝试重构一些代码,我们目前不使用 AutoMapper 或任何映射工具。
我将如何为以下创建一个通用方法?
我有大约 8 个不同的 ViewModel 传递相似的数据。
public static AppUser Create(RegisterViewModel model)
{
return new AppUser()
{
FirstName = model.FirstName,
LastName = model.LastName,
Email = model.Email,
};
}
public static AppUser Create(TeamUserViewModel model)
{
return new AppUser()
{
FirstName = model.FirstName,
LastName = model.LastName,
Email = model.Email,
};
}
我在想类似的事情:
public static AppUser Create<T>(T Model)
{
}
是的,你可以做这样的事情。 问题是您将无法访问FirstName
、 LastName
或Email
的变量。 你应该做的是创建一个 class 如下
public class BaseClass
{
public string FirstName;
public string LastName;
public string Email;
}
现在让您的RegisterViewModel
和TeamUserViewModel
像这样扩展这个 class
public class RegisterViewModel : BaseClass
{
// specialized information here
}
现在在您的新 function 中,您可以像这样指定T
的类型
public static AppUser Create<T>(T model) where T : BaseClass
{
// Stuff here
}
现在您将可以访问BaseClass
中定义的每个变量/方法。 好处是您的每个扩展类都不受限于这几个变量。
此外,如果您想为每个 model 执行专门的逻辑,您可以执行以下操作:
if(typeof(T) == typeof(TeamUserViewModel))
{
// Perform action
}
else if (typeof(T) == typeof(RegisterViewModel))
{
// Perform different action
}
您可以执行以下操作:
public static AppUser Create(BaseViewModelBaseClass model)
public static AppUser Create(IUserDetailsViewModel Model)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.