1

ここで最後から 2 番目の行のようなものは可能ですか? 宣言自体の中で他のプロパティを参照している IE ですか?

私の実際のコードでは、A と B は複雑な LINQ Enumerables (これで問題ありません) に設定されており、C は A.Count() のようなものになる可能性があります。

class Thing {
    public int A;
    public int B;
    public int C;
}

Thing myThing = new Thing() {
    A = 1,
    B = 2,
    C = A+B
}

を構築する最も効率的な方法を見つけようとしているだけmyThingです。

4

5 に答える 5

1

次の例を検討してください。

int A = 0;
int B = 0;
int C = 0;
MyThing myThing = new MyThing() {
    A = 1,
    B = 2,
    C = A + B
}

// myThing.A == 1
// myThing.B == 2
// myThing.C == 0

いいえ。それは不可能。代わりに他の回答を使用してください。

于 2013-07-10T12:58:23.763 に答える
1

残念ながら、オブジェクトの初期化子でプロパティの値を取得することはできません。

于 2013-07-10T13:03:01.460 に答える
1

A と B を参照して C で使用できるようになる前に、A と B が更新されるとは思いません。私の目に見える解決策は、オブジェクトを作成する前に A と B を変数に単純に割り当てることです。

var variable1 = 1
var variable2 = 2

Thing myThing = new Thing() {
    A = variable1,
    B = variable2,
    C = variable1+variable2
}

そうすれば、Cで使用する前に両方の変数が変更されていることを確認できます

編集:「オブジェクトを初期化した後にプロパティ C を定義する以外に選択肢はありませんか?」問題は、A と B がまだ初期化されていないため、それらを使用して C を作成できないことです。ただし、別の名前 (上記の例では変数 1 と変数 2) でそれらを初期化すると、引き続き使用できます。 C を取得する値

于 2013-07-10T13:03:40.337 に答える
0

救助へのプロパティ(あなたの例に基づく)

class Thing {
    public IEnumerable<someType> A { get; set; }
    public IEnumerable<someType> B { get; set; }
    public int C { get { return A.Count(); } }
}

ABを設定するだけCで、他の 2 つに基づいて「独自に」出てきます。必要に応じて null チェックとエラー処理を追加します。実際、Cこのサンプルでは をまったく設定できません。その値は別のプロパティ (ここではA) に依存するため、正しいです。

于 2013-07-10T12:57:15.377 に答える
0

使用しているオブジェクト初期化構文は、値を割り当てるための単なるショートカットであるため、次のようにすることができます。

Thing myThing = new Thing() {
    A = 1,
    B = 2};
myThing.C =myThing.A + myThing.B;
于 2013-07-10T12:57:28.883 に答える