我尝试使用XDocument
(XML Linq)来保存和加载类。为此我有两种方法:
static MyClass FromXml(XElement data); //calls 0-parameter constructor inside
public XElement ToXml();
像这样的构造函数
public MyClass(XElement data)
{
this = MyClass.FromXml(data);
}
不起作用(说这是只读的)。
这可以以某种方式完成(没有创建从返回值手动复制每个字段)?
或者这个想法是错的?
将代码从FromXml
移动到构造函数应该可以工作,但是保存和加载将在两个地方进行,或者构造函数不会都在一个地方......
答案 0 :(得分:5)
我认为你不想要一个构造函数;你想要一个返回MyClass类型的static factory method。看起来你已经有方法FromXml了。如果你真的想要的话,你总是可以写一个copy constructor来接收另一个MyClass实例。
答案 1 :(得分: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
}
}
答案 2 :(得分:1)
您可以创建一个非公开方法static MyClass FromXml(XElement data, MyClass instance)
,使用instance
填充传入的data
。然后,您可以从构造函数中调用它,并将this
作为参数传递。