哪种方法最好?AutoMapper 反对隐式(C# 参考)

Zin*_*nov 7 c# automapper

Automapper 是一种匹配类型的方法,理想情况下,当您想要映射模型及其视图模型时。但这不是我们可以在 C# 中隐式使用的相同方法吗?(假设两个模型属性相同但名称不同,此时需要在模型间链接的AutoMapper中指定)

使用 autommaper 我们有

public class Employee
{
    public string Name { get; set; }
    public string Email { get; set; }
}

public class EmployeeViewItem
{
    public string Name { get; set; }
    public string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

通常我们这样做:

Employee employee = new Employee
{
    Name = "John SMith",
    Email = "john@codearsenal.net"
}

EmployeeViewItem viewItem = new EmployeeViewItem();
viewItem.Name = employee.Name;
viewItem.Email = employee.Email;
Run Code Online (Sandbox Code Playgroud)

使用 AutoMapper

 EmployeeViewItem employeeVIewItem = Mapper.Map<Employee, EmployeeViewItem>(employee); 
Run Code Online (Sandbox Code Playgroud)

现在,使用隐式 C# 参考

public class Employee
{
    public static implicit operator EmployeeViewItem(Employee employee)
    {
         EmployeeViewItem viewItem = new EmployeeViewItem();
         viewItem.Name = employee.Name;
         viewItem.Email = employee.Email;
         return viewItem;
    }

    public static implicit operator Employee(EmployeeViewItem ev)
    {
        var e = new Employee();
        e.Name = ev.Name;
        e.Email = ev.Email;
        return e;
    }
}
Run Code Online (Sandbox Code Playgroud)

Jer*_*vel 6

AutoMapper 使用反射来映射属性(轻微的性能开销),允许用于映射的高级自定义规则,并且在基本(常见?)场景中需要 1 行代码。

隐式运算符要求您指定每个属性,容易出错(添加新属性但不将其添加到运算符中),更难以为多种类型设置,创建大量无用代码,即使在最基本的设置中,您仍然有 N 行代码,其中 N 是属性的数量。

我认为它不言自明。

  • 好的,但是如果您不能在两个模型中放置相同的属性名称怎么办? (2认同)
  • 类型安全怎么样?在运算符情况下,将在编译时检查投影,而使用反射时,类型错误将导致运行时错误。 (2认同)