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 変数から合計を生成できないという技術的な理由はないと思いますが、数値オブジェクトに配置されるまで、それにアクセスするための構文はありません。

于 2010-08-16T11:14:54.300 に答える