如何将一个类的对象转换为另一类(类成员不同)

时间:2019-11-22 05:55:31

标签: c#

我有一个场景,其中我的(objA)为(A类),(objB)为(B类)。 A类和B类中的成员变量不匹配。 我需要将数据从objA分配给objB。 我四处搜索并找到了与将objA映射到成员变量相同的objB有关的解决方案。但是当A类和B类的成员不同时,我什么也没发现。

下面是两个示例类(A类和B类),以供您参考。

public class Class A
{
    private ABCHeaderType ABCHeaderField;
    private string title;
    private string date;
    private string id;
    private string location;
    private string status;
    private string hashNumber;      
    .....skipped getter setters     
}   
public class ABCHeaderType { 
    private string version;    
    private string outputTypeField;    
    private int langCd;       
    private string dateTime;    
    private string hashField;
        .....skipped getter setters
}

public class Class B
{
    public Input input { get; set; }

}
public class Input
{
    public Output output{ get; set; }
}
public class Output
{
    public string Title { get; set; }
    public string Date { get; set; }
    public string id { get; set; }
    public string location { get; set; }
    public string Status { get; set; }
    public string laterDate { get; set; }
    public string hashNumber { get; set; }
    public Info info { get; set; }
}
public class Info
{
    public string name { get; set; }
    public string ht { get; set; }
    public string type { get; set; }
    public string res { get; set; }
    public string wd { get; set; }
    public string ornt { get; set; }
}

现在,我正在使用转换器类将objA复制到objB中,并使用下面的代码段进行复制

objB.input.output.Title = objA.Title;
objB.input.output.Date = objA.Date;
objB.input.output.id = objA.id;
objB.input.output.location = objA.location;
objB.input.output.Status = objA.Status;
objB.input.output.hashNumber = objA.hashNumber;

objB.input.output.inf.type = objA.ABCHeaderField.outputTypeField

谢谢...

2 个答案:

答案 0 :(得分:0)

您可以使用基本字段创建接口BaseObject,这些基本字段可以由类A和输出实现:

public interface BaseObject
{
    string Title { get; set; }
    string Date { get; set; }
    string id { get; set; }
    string location { get; set; }
    string Status { get; set; }
    string laterDate { get; set; }
    string hashNumber { get; set; }
    Info info { get; set; }
}
public class A : BaseObject
{
    public string Title { get; set; }
    public string Date { get; set; }
    public string id { get; set; }
    public string location { get; set; }
    public string Status { get; set; }
    public string laterDate { get; set; }
    public string hashNumber { get; set; }
    public Info info { get; set; }
  // your code....
}
public class B
{
    public Input Input { get; set; }
}
public class Input
{
    public BaseObject Output{ get; set; }
}

public class Output : BaseObject
{
    public string Title { get; set; }
    public string Date { get; set; }
    public string id { get; set; }
    public string location { get; set; }
    public string Status { get; set; }
    public string laterDate { get; set; }
    public string hashNumber { get; set; }
    public Info info { get; set; }
}

然后您可以执行以下操作:

var objB = new B
{
     Input = new Input
     {
        Output = new A()
      }
};

如果obejct已初始化并且已初始化字段,请输入:

objB.Input.Output = objA;

答案 1 :(得分:0)

从评论中:

  

这两个类的关联方式是-认为objA是从一个系统传入的对象,而objB是要发送到另一个系统的对象。但是objB需要来自objA的数据

“共享数据”类怎么样?双方所有领域都有共同点的事物。视情况而定,只读结构可能会更好-否则您可能不得不克隆。

public readonly struct SharedData{
    public readonly string Title;
    public readonly string Date;
    public readonly string id;
    public readonly string location;
    public readonly string Status;
    public readonly string laterDate;
    public readonly string hashNumber;
}

MVVM模式在演示方面处理很多。确实,这就是视图模型的大部分用途(仅是字母的一半)。在MVVM中,您需要带有更改通知的属性,通常也是那些也接受原始字符串的属性。该视图通常不包含这些视图,并且无法修改以获取这些视图。

“如果无法修改,请将其包装成可以修改的内容”。大多数View类不能被修改或继承。因为它们来自某个外部来源,或者需要它们当前的行为。因此,通常您必须编写ViewModel类,以包装这些View类为主要目的。 (制作VM类还有其他优点,但这些优点通常是特定于MVVM / XAML的。)

相关问题