我有一个场景,其中我的(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
谢谢...
答案 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的。)