功能&对象初始化器中的属性用法

时间:2014-01-06 22:13:16

标签: c# struct object-initializers

C#规范是否阻止在对象(或结构体)初始化器构造中调用方法?

我问的原因是因为我试图使用LINQ-to-XML语句在初始化程序中使用gater数据。这不起作用。但是,如果我将手数保存到局部变量之前得到数据,它可以正常工作。我只是想知道为什么会发生这种情况,因为我已经在我的代码中找出了错误。

不起作用:

SavedData sData = new SavedData()
{
        exportLocation = data.Root.Descendants("ExportLocation").FirstOrDefault().Value,
        exportType = (ExportType)data.Root.Descendants("ExportType").FirstOrDefault().Value
};

使用:

var exLoc = data.Root.Descendants("ExportLocation").FirstOrDefault().Value;
ExportType type = (ExportType)data.Root.Descendants("ExportType").FirstOrDefault().Value;

Saved Data sData = new SavedData()
{
     exportLocation = exLoc,
     exportType = type
};

1 个答案:

答案 0 :(得分:1)

您可以在初始化程序中调用方法,因此此处还有其他内容。

以下对我来说很好:

    class A
    {
        public int x { get; set; }
    }

    class B
    {
        public int foo()
        {
            return 3;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            B data = new B();
            A a = new A() {
                x = data.foo()
            };
        }
    }

a.x设置为3,因此工作正常。

当您重写时,您的代码可能是另一个问题。它也可能是SavedData构造函数正在做的事情,它使数据无效。