![](/img/trans.png)
[英]How to convert one object to another when both are different types but inherit from the same parent class
[英]How to convert a object of one class to another (where the class members are different)
我有一個場景,其中我有(A 類)的(objA)和(B 類)的(objB)。 Class A 和 Class B 中的成員變量不匹配。 我需要將數據從 objA 分配給 objB。 我四處搜索並找到了與將 objA 映射到成員變量相同的 objB 相關的解決方案。 但是當 Class A 和 class B 中的成員不同時,我還沒有發現任何東西。
下面是 2 個示例類(A 類和 class 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; }
}
現在我正在使用轉換器 class 將 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
謝謝...
您可以使用類 A 和 Output 實現的基字段創建接口 BaseObject:
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;
從評論:
這兩個類以某種方式相關 - 考慮 objA 是來自一個系統的傳入 object,而 objB 是一個 object 以發送到不同的其他系統。 但是 objB 需要來自 objA 的數據
class“共享數據”怎么樣? 雙方在所有領域都有共同點。 根據具體情況,只讀結構可能會更好 - 否則您可能必須克隆。
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 模式處理了很多表示。 實際上,這就是 View Model(這些字母的一半)的大部分內容。 在 MVVM 中,您需要帶有更改通知的屬性,通常也是接受原始字符串的屬性。 視圖通常沒有這些 - 並且無法修改以獲得那些。
“如果你不能修改它,把它包裝成你可以修改的東西”。 大多數視圖類不能修改或繼承。 因為它們來自某些外部來源,或者需要它們當前的行為。 因此,您通常必須編寫 ViewModel 類,其主要目的是包裝這些 View 類。 (制作 VM 類還有其他優點,但這些往往是 MVVM/XAML 特定的)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.