如何实现C#工厂方法在同结构不同命名空间类间转换并保留数据
解决方法
你的核心问题是转换方法没有接收要转换的源对象实例,而是直接创建了新的类实例(比如MyFirstClass()),根本拿不到实际要转换的数据。另外代码里还有语法错误和拼写问题,下面是修正后的完整实现:
修正后的代码
namespace MyMainNameSpace { using MySubNameSpace; using MyOtherSubNameSpace; public static class FactoryClass { // 把MyFirstClass实例转换成MySecondClass public static MySecondClass ConvertToSecondClass(MyFirstClass source) { return new MySecondClass() { Attr1 = source.Attr1, Attr2 = source.Attr2 }; } // 把MySecondClass实例转换成MyFirstClass(修正方法名拼写错误:CLass → Class) public static MyFirstClass ConvertToFirstClass(MySecondClass source) { return new MyFirstClass() { Attr1 = source.Attr1, Attr2 = source.Attr2 }; } } } namespace MyOtherSubNameSpace { public class MySecondClass { public required string Attr1 { get; set; } public required string Attr2 { get; set; } } } namespace MySubNameSpace { public class MyFirstClass { public required string Attr1 { get; set; } public required string Attr2 { get; set; } } }
关键修改点说明
- 给每个转换方法添加源对象参数:比如
ConvertToSecondClass接收MyFirstClass source,这样才能获取到要转换的实际数据。 - 用
source.Attr1、source.Attr2直接读取源对象的属性值,赋值给新创建的目标类实例的对应属性。 - 修正方法名拼写错误:
ConvertToFirstCLass改为ConvertToFirstClass(大写L改成小写l)。 - 修正对象初始化器语法错误:把属性后的分号
;改成逗号,(对象初始化器中多个属性用逗号分隔)。
使用示例
// 创建MyFirstClass实例 var firstObj = new MyFirstClass() { Attr1 = "Value1", Attr2 = "Value2" }; // 转换成MySecondClass var secondObj = FactoryClass.ConvertToSecondClass(firstObj); // 验证属性值是否保留 Console.WriteLine(secondObj.Attr1); // 输出 "Value1" Console.WriteLine(secondObj.Attr2); // 输出 "Value2"
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

