这是最好的类型转换方式

时间:2014-07-09 20:01:02

标签: c# .net-4.0 type-conversion

我想转换另一个类型(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();

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

2 个答案:

答案 0 :(得分:1)

你的方法非常好。我只是调用方法ToTest2,因为这似乎是.net库建立的约定(例如,比较ToStringToListToArray, ...)。

答案 1 :(得分:1)

虽然您的方法很好,但我发现扩展方法非常适合类型转换。它们可以让类型不会彼此意识到,并专注于他们的业务职责。目前,您的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);