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

2023-11-21

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; }
}

通常我们这样做:

Employee employee = new Employee
{
    Name = "John SMith",
    Email = "[email protected]"
}

EmployeeViewItem viewItem = new EmployeeViewItem();
viewItem.Name = employee.Name;
viewItem.Email = employee.Email;

与自动映射器

 EmployeeViewItem employeeVIewItem = Mapper.Map<Employee, EmployeeViewItem>(employee); 

现在,使用隐式 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;
    }
}

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

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

我认为这是不言而喻的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

哪种方法是最好的? AutoMapper 反对隐式(C# 参考) 的相关文章

  • 使用链表进行堆排序

    我想知道是否有人曾经使用链表进行堆排序 如果他们可以提供代码 我已经能够使用数组进行堆排序 但尝试在链表中进行排序似乎不切实际 而且在你知道的地方很痛苦 我必须为我正在做的项目实现链接列表 任何帮助将不胜感激 我也用C 答案是 你不想在链表
  • 格式说明符%02x

    我有一个简单的程序 include
  • 使用 ADAL v3 使用 ClientID 对 Dynamics 365 进行身份验证

    我正在尝试对我们的在线 Dynamics CRM 进行身份验证以使用可用的 API 我能找到的唯一关于执行此操作的官方文档是 https learn microsoft com en us dynamics365 customer enga
  • 关于逻辑/算法的想法以及如何防止线程写入 Sql Server 中的竞争

    我有以下逻辑 public void InQueueTable DataTable Table int incomingRows Table Rows Count if incomingRows gt RowsThreshold async
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 如何修复错误:“检测到无法访问的代码”

    我有以下代码 private string GetAnswer private int CountLeapYears DateTime startDate return count String answer GetAnswer Respo
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • 来自嵌入图像的 BitmapSource

    我的目标是在 WPF 窗口上重写 OnRender 方法中绘制图像 someImage png 它是嵌入资源 protected override void OnRender System Windows Media DrawingCont
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • 条件类型定义

    如果我有一小段这样的代码 template
  • 如何在 Javascript 中连接 C# ActiveX 事件处理程序

    我尝试使用几个代码片段将 ActiveX 对象与 Javascript 事件处理程序挂钩 我无法确定为什么事件处理程序没有被调用 带有项目的 Github 存储库 https github com JesseKPhillips Csharp
  • 如何防止 Blazor NavLink 组件的默认导航

    从 Blazor 3 1 Preview 2 开始 应该可以防止默认导航行为 https devblogs microsoft com aspnet asp net core updates in net core 3 1 preview
  • 对于 C# Express 用户来说,有哪些好的工具可以识别可能重复的代码? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 也可以看看 有什么工具可以检查重复的 VB NET 代码吗 https stackoverflow c
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • 读取依赖步行者输出

    I am having some problems using one of the Dlls in my application and I ran dependency walker on it i am not sure how to
  • 调用 .ToArray() 时出现 ArgumentException

    我有一个经常被清除的列表 代码完全是这样的 VisitorAgent toPersist List
  • C++ 指针引用混淆

    struct leaf int data leaf l leaf r struct leaf p void tree findparent int n int found leaf parent 这是 BST 的一段代码 我想问一下 为什么
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • ContentDialog Windows 10 Mobile XAML - 全屏 - 填充

    我在项目中放置了一个 ContentDialog 用于 Windows 10 上的登录弹出窗口 当我在移动设备上运行此项目时 ContentDialog 未全屏显示 并且该元素周围有最小的填充 在键盘上可见 例如在焦点元素文本框上 键盘和内

随机推荐

  • 使用 CsvHelper 可以将空格转换为可为空吗?

    我有一些非常蹩脚的 Csv 文件需要解析 我正在使用 CsvHelper 它运行得很棒 除了我有一些带有空格的行 通常我有一个双行 File 文本 SomeDouble 更多文本 好 1 23 好 不好 不好 如果我尝试将其映射到 publ
  • 用于去抖动(包括函数参数)的 Python 装饰器

    如何在 python 中编写一个去抖装饰器 它不仅对调用的函数进行去抖 而且对所使用的函数参数 函数参数组合进行去抖 去抖意味着在给定的时间范围内抑制对函数的调用 假设您在 1 秒内调用一个函数 100 次 但您只想允许该函数每 10 秒运
  • MySQLi 相对于 MySQL 的优势 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 与 MySQL 相比 使用
  • C 中的指针和数组有什么不同吗?

    我正在编写一个小型 C 程序来进行一些数字运算 它需要在函数之间传递数组 这些函数应该接受并返回指针 对吧 例如 这个 我知道这可能不是最有效的事情 int reverse int l int len int reversed malloc
  • Bootstrap 3.0:响应列重置文档部分

    嘿 如果您在 Bootstrap 3 0 文档中查看 响应列重置 副标题 它会显示以下内容 有了四层网格 您必然会遇到问题 在某些断点处 您的列不能完全清除 因为一层比另一层高 要解决此问题 请结合使用 clearfix 和我们的响应式实用
  • ASP.NET MVC 路由和静态数据(即图像、脚本等)

    如果我在 ASP NET MVC1 或 2 Web 应用程序中请求静态资源 例如 图像 javascript 文件或 css 文件 NET 框架是否会尝试查看如果请求与路由列表匹配 并且最终找不到它的控制器 eg 资源 Content Im
  • 如何在 PHP 中将日期时间转换为 ISO 8601

    我如何转换我的时间2010 12 30 23 21 46ISO 8601 日期格式 面向对象 这是推荐的方式 datetime new DateTime 2010 12 30 23 21 46 echo datetime gt format
  • 使用 go-template 内的范围检测数组中的最后一项

    这个程序简单地输出 1 4 2 但我想打印 1 4 2 正如您所看到的 逗号打印在数组的每个项目之后 package main import os import text template func main params map stri
  • 在Android中编辑文本时获取光标位置?

    我正在使用自定义 EditText 视图 我已经重写了 OnKeyUp 事件并且能够捕获 Enter 键按下 现在我的要求是 当用户输入文本 嗨 你好吗 然后将光标保留在 are 一词后面并按 Enter 键 我需要获取光标位置 以便在按下
  • 在多线程环境中使用 HttpClient 的最佳实践

    一段时间以来 我一直在多线程环境中使用 HttpClient 对于每个线程 当它发起连接时 都会创建一个全新的 HttpClient 实例 最近我发现 使用这种方法会导致用户打开的端口过多 并且大部分连接处于TIME WAIT状态 http
  • 如何使用 Eclipse 逐行调试 Android 应用程序?

    我熟悉 VS Net IDE 它对调试有很多支持 但android开发对我来说是新鲜事 我正在使用 Eclipse IDE 我想知道如何像在 Net IDE 中一样逐行调试 Android 应用程序 目前我正在使用日志窗口 但我对此并不满意
  • 运行 cordova 平台添加 android 时生成错误

    我正在尝试根据以下链接创建一个 Android PhoneGap 项目 http docs phonegap com en edge guide platforms android index md html 但是 当我运行命令时 cord
  • 是否可以在 ASP.NET ListView 控件中进行自定义分组?

    你只能在ListView中定义一个GroupItemCount 但是如果你想根据数据源中项目的属性进行分组怎么办 有点像临时分组依据 数据源按此属性排序 我见过一些示例 其中 ItemTemplate 中的某些标记是有条件显示的 但如果可能
  • Rails 路由可在单个应用程序上处理多个域

    尽管这里和其他地方有几个类似的问题 但我一直无法找到解决此问题的可行解决方案 这个问题似乎在 Rails 3 中还没有得到解答 所以这里是 我有一个应用程序 当前允许用户创建自己的包含应用程序实例的子域 在 Rails 2 中 您最好使用
  • Rails 3:调用控制器内的函数

    如果我想在控制器内部调用函数 我应该把它们放在哪里 如果您希望它位于控制器本地 那么您所需要做的就是将其添加到您想要使用的控制器中 private def myfunction function code end 对于所有控制器 您可以将其
  • 用户态自动装箱?

    是否可以为您自己的类实现自动装箱 为了说明我的示例 我可能想写以下内容 Foo foo lolcat 这就是 Java 在幕后要做的事情 根据我自己的定义 在某个地方 以某种方式 Foo foo new Foo foo setLolcat
  • 如何动态渲染新的 Twitter 小部件?

    如果我在 Twitter 上注册一个小部件 我会得到以下代码 a class twitter timeline href https twitter com vinto60utd Tweets by vinto60utd a
  • Sequelize — 对 DATE 字段使用 UNIX 时间戳

    有没有办法强制 Sequelize 使用 UNIX 时间戳作为默认时间格式both对于createdAt updatedAt时间戳and对于自定义的 Sequelize DATE 字段类型 Thanks 附 我正在使用 MySQL Whil
  • Java:优先级队列

    我有一个java程序 它是这样的 公共类 PriorityQueue 示例 public static void main String args PriorityQueue
  • 哪种方法是最好的? AutoMapper 反对隐式(C# 参考)

    Automapper 是一种匹配类型的方法 理想情况下当您想要映射模型及其视图模型时 但这与我们在 C 中使用隐式实现的方法不一样吗 假设两个模型具有相同的属性但名称不同 在这种情况下 您需要在 AutoMapper 中指定模型之间链接的模