代码之家  ›  专栏  ›  技术社区  ›  crazy novice

这是最好的类型转换方法吗

  •  1
  • crazy novice  · 技术社区  · 11 年前

    我想从一种类型(Test1)转换另一种类型的数据(Test2)。我可以用Test1类中的一个方法来实现,如下所示。

    public class Test1
    {
        public int x { get; set; }
        public int y { get; set; }
        public int y { get; set; }
    
        public Test2 ConvertToTest2()
            {
                // ............
            }       
    }
    
    public class Test2
    {
        public float Alpha { get; set; }
        public float Beta  { get; set; }
    }
    
    Test1 test1 = new Test1() { x=1, y=2, z=3 };
    Test2 test2 = test1.ConvertToTest2();
    

    我知道还有其他机制( IConvert , Convert , TypeConverter 等等)。我想知道我在做什么是最好的方法?如果有其他方法更适合这一点,您能否建议如何实现这一点?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Heinzi    11 年前

    你的方法非常好。我会调用该方法 ToTest2 ,因为这似乎是.net库建立的惯例(例如,与 ToString , ToList , ToArray , ...).

        2
  •  1
  •   Sergey Berezovskiy    11 年前

    虽然您的方法很好,但我发现扩展方法非常适合类型转换。它们允许保持类型之间的互不了解,并专注于其业务职责。当前您的 Test1 班级不遵守单一责任原则。它有两个原因需要更改-如果是数据或逻辑更改,或者转换为 Test2 更改(例如属性重命名、删除或某些转换规则更改)。

    下面是扩展方法的外观:

    public static Test2 ToTest2(this Test1 source)
    {
        return new Test2 {
            // ...
        };
    }
    

    用法将保持不变:

    var test1 = new Test1() { x=1, y=2, z=3 };
    var test2 = test1.ToTest2(); 
    

    您还应该考虑使用一些映射工具,例如 AutoMapper 。它自动映射具有相同名称的财产,并允许您指定自定义映射规则。映射将如下所示:

    var test2 = Mapper.Map<Test2>(test1);