簡體   English   中英

如何將一個 class 的 object 轉換為另一個(其中 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM