如何从静态方法返回值创建C#类实例?

Luk*_*kas 0 c# constructor static-methods

我尝试使用XDocument(XML Linq)来保存和加载类.为此,我有两种方法:

static MyClass FromXml(XElement data); //calls 0-parameter constructor inside
public XElement ToXml();
Run Code Online (Sandbox Code Playgroud)

像这样的构造函数

public MyClass(XElement data)
{
    this = MyClass.FromXml(data);
}
Run Code Online (Sandbox Code Playgroud)

不起作用(说这是只读的).这可以以某种方式完成(没有创建从返回值手动复制每个字段)?
或者这个想法是错的?
将代码从FromXml构造函数移动应该可以工作,但是然后保存和加载将在两个地方或构造函数不会在一个地方...

Tru*_*ill 5

我认为你不想要一个构造函数; 你想要一个返回MyClass类型的静态工厂方法.看起来你已经有方法FromXml了.如果你真的想要的话,你总是可以编写一个复制构造函数来接收另一个MyClass实例.


Joh*_*rer 5

我认为你需要这样的东西:

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
    }
}
Run Code Online (Sandbox Code Playgroud)