【问题标题】:Generic custom method to convert one object type to another in c#在 C# 中将一种对象类型转换为另一种对象类型的通用自定义方法
【发布时间】:2018-12-21 00:06:51
【问题描述】:

我,正在尝试实现一个通用方法,在 c# 中将一个对象转换为另一个对象。

这是我尝试过的一些代码

 public interface IDTOMapper<TSource, TDestination>
        {
            TDestination Convert(TSource source_object);
        }


    public class DtoMapper<TSource, TDestination> : IDTOMapper<TSource, TDestination>
        {
            public TDestination Convert(TSource source_object)
            {
           // How to write the code to convert one class object to another

            }
        }

我在转换方法中使用的代码有很多错误。谁能告诉我如何使用任何类类型的对象来实现。我发现的一些示例具有特定的类对象转换。

当我谷歌时,我发现有 auto-mapper 库,我不想使用 auto-mapper 库。只想写自定义泛型方法

部分参考

Best Practices for mapping one object to another

https://softwareengineering.stackexchange.com/questions/301580/best-practices-regarding-type-mapping-and-extension-methods

Generic method to map objects of different types

https://www.codeproject.com/Tips/781202/Csharp-Custom-Mapper

【问题讨论】:

  • “转换”是什么意思?如果它们彼此继承,则可以进行强制转换。如果不是,为什么不呢?为什么你需要这样做?这是一个非常奇怪的要求;在正常情况下,您不需要这样做。或者,映射器正是您所需要的。
  • 它们不是相互继承的。一个是数据库模型,另一个是几乎具有相同属性的视图模型。我知道自动映射器会做那件事,但我不想为此使用自动映射器。
  • 那么,你到底有什么问题。你还没有问过问题。
  • 我在转换方法中使用的代码不起作用。我已经更新了代码。
  • 您可以为此使用反射,因此只能匹配属性。任何自动映射器最终都会这样做。你可以在这里找到它stackoverflow.com/questions/2142650/…。但是如果你的属性不一样,那么我认为你不可能有一个通用的实现,你必须为每个案例有单独的实现。

标签: c# asp.net asp.net-mvc asp.net-core


【解决方案1】:

您说您不想使用自动映射器,但您尝试编写的内容是相同的。您只是要重新发明轮子并编写自己的自动映射器。

我强烈建议使用像 AutoMapper 这样的现有库。它会更快,错误更少。

如果不是这样,那么我自己会避免尝试自动执行此任务。对于每个 ViewModel 类,添加一个方法 CopyFromBusiness 并在其中手动编写复制代码。是的,这是非常重复的,但是编写自己的自动映射器几乎是一样多的工作,而且结果总是比现有的库差。手动编写的CopyFromBusiness 方法将是最快的选择(在运行时),并且将来代码将更容易维护,因为不会有任何隐藏的魔法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多