2011-06-18 100 views
0

我嘗試使用XDocument(XML Linq)來保存和加載類。爲此,我有兩種方法:如何從靜態方法返回值創建C#類實例?

static MyClass FromXml(XElement data); //calls 0-parameter constructor inside 
public XElement ToXml(); 

一個構造這樣

public MyClass(XElement data) 
{ 
    this = MyClass.FromXml(data); 
} 

不起作用(說這是隻讀)。 這可以以某種方式完成(沒有創建從返回的值手動複製每個字段)?
或者是想法不對?
移動代碼FromXml構造器應該工作,但隨後保存和負荷將在兩個地方或構造不會在同一個地方......

+0

也許你可以將構造函數中的數據加載到「MyClass」類型的臨時變量中,然後執行如下所述的值複製:http://stackoverflow.com/questions/3610891/c-copying- property-values-from-one-instance-to-another-different-classes – jCoder

+2

忘掉那個ctor,只使用FromXml()。 –

回答

5

我不認爲你需要一個構造函數;你想要一個static factory method返回類型MyClass。看起來你已經有了FromXml方法。如果你真的想要,你總是可以寫一個copy constructor,它接受另一個MyClass的實例。

4

我認爲你需要像這樣:

public class MyClass 
{ 
    public MyClass() {} 
    public MyClass(XElement data) 
    { 
     loadXml(this, data);  
    } 
    public static MyClass LoadXml(data) 
    { 
     var output = new MyClass(); 
     loadXml(output, data); 
     return output; 
    } 
    private static void loadXml(MyClass classToInitialize, XElement data) 
    { 
     // your loading code goes here 
    } 
} 
1

您可以創建一個非公開的方法static MyClass FromXml(XElement data, MyClass instance)填補傳入的instance使用data。然後,您可以從構造函數中調用該函數,並將其作爲參數傳遞給this

相關問題