繁体   English   中英

为多个类似的类创建一个通用方法

[英]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)
    {
    }

是的,你可以做这样的事情。 问题是您将无法访问FirstNameLastNameEmail的变量。 你应该做的是创建一个 class 如下

public class BaseClass
{
   public string FirstName;
   public string LastName;
   public string Email;
}

现在让您的RegisterViewModelTeamUserViewModel像这样扩展这个 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
}

您可以执行以下操作:

  • 创建一个基础 class,您的视图 model 继承自包含 FirstName、LastName、Email 的基础。 在 Create 方法的参数中使用基本 class: public static AppUser Create(BaseViewModelBaseClass model)
  • 创建一个名为 IUserDetails 的接口,由您的视图模型实现,并使您的参数public static AppUser Create(IUserDetailsViewModel Model)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM