今天我很惊讶发现我无法做到以下几点。
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"
}
我只是缺少一些语法?或者这不可能吗?
答案 0 :(得分: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
尚未分配。
答案 1 :(得分: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;
虽然我认为没有技术原因你不能从&lt;&gt; g__initLocal1变量中生成总和,但是在将它放入数字对象之前,没有可用的语法来访问它。