0

今天我很惊讶地发现我不能做以下事情。

public class NumberyStuff
{
    public List<int> Numbers { get; set; }
    public int Total { get; set; }
}


var numbers = new NumberyStuff
{
     Numbers = new List<int>{ 1, 2, 3, 4, 5 },
     Total = Numbers.Sum() // "Numbers does not exist in the current context"
}

我只是缺少一些语法吗?或者这是不可能的?

4

2 回答 2

3

尽管看起来有点像,但初始化器不是ctor,而是在调用例程的上下文中,因此没有this指针。您必须编写如下内容:

// This doesn't work either.
var numbers = new NumberyStuff  
{  
     Numbers = new List<int>{ 1, 2, 3, 4, 5 },  
     Total = numbers.Numbers.Sum()   
}  

除了,numbers尚未分配。

于 2010-08-16T11:26:31.643 回答
2

这是不可能的,您需要将总设置移出对象构造:

var numbers = new NumberyStuff
{
     Numbers = new List<int>{ 1, 2, 3, 4, 5 }         
}
numbers.Total = numbers.Numbers.Sum();

如果您实际反汇编并查看生成的 Numbers 属性初始化代码,您会发现这一切都是通过临时变量完成的。

NumberyStuff <>g__initLocal0 = new NumberyStuff();
List<int> <>g__initLocal1 = new List<int>();
<>g__initLocal1.Add(1);
<>g__initLocal1.Add(2);
<>g__initLocal1.Add(3);
<>g__initLocal1.Add(4);
<>g__initLocal1.Add(5);
<>g__initLocal0.Numbers = <>g__initLocal1;
NumberyStuff numbers = <>g__initLocal0;

虽然我猜应该没有技术原因不能从 <>g__initLocal1 变量生成总和,但在将其放入 numbers 对象之前,您没有可用的语法来访问它。

于 2010-08-16T11:14:54.300 回答