我想转换另一个类型(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
等)。我想知道我在做什么是最好的方法?如果有其他方法更适合这种情况,您能否建议如何实现这一目标?
答案 0 :(得分:1)
你的方法非常好。我只是调用方法ToTest2
,因为这似乎是.net库建立的约定(例如,比较ToString
,ToList
,ToArray
, ...)。
答案 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);