2012-03-26 9 views
14

私は、プログラムでオブジェクトとコレクションの初期化子を使用しており、以下の例を得る方法を考えています。オブジェクトとコレクションの初期化子 - 自己を割り当てますか?

Orders.Add(new Order() 
       { 
        id = 123, 
        date = new datetime(2012,03,26) 
        items = new OrderItems() 
          { 
          lineid = 1, 
          quantity = 3, 
          order = ?? // want to assign to current order. 
          } 
       } 

私は新しく作成した注文を注文アイテムに割り当てることはできますか?

+0

最初にOrderItemsコレクションを追加してから、オーダーを割り当てることができます。あるいは、一方的な関係で大丈夫かもしれません。 – ashes999

+1

モデリングの観点からは奇妙に見えます。 'OrderItem'に' Order'が含まれているのはなぜですか?私は 'Order'が集合ルートであり、それらのアイテム(' OrderItem's)に関する追加のコンテキストを持つアイテムを含んでいると思います。しかし、これらのアイテムは、実際に注文について何も知る必要はありません。 – David

+0

回避策として、 'items'の設定者にプロパティを透過的に割り当てることができますが、後でコレクションに追加される' OrderItem'に対しては機能しません。 – millimoose

答えて

10

あなたがここにしようとしていることはできません。オブジェクトのイニシャライザ本体から構築されているオブジェクトを参照することはできません。 Order.itemsが財産である場合は、

public class Order 
{ 
    private OrderItems _items; 
    public OrderItems items 
    { 
     get { return _items; } 
     set 
     { 
      _items = value 
      _items.order = this 
     } 
    } 
} 

次に、あなただけの注文を取ることができますが、プロパティのセッターにこのような何かを置くことができ、別々のステップ

var local = new Order() { 
    id = 123, 
    date = new datetime(2012, 03, 26); 
}; 
local.items = new OrderItems() { 
    lineid = 1; 
    quantity = 3; 
    order = local; 
}; 
Orders.Add(local); 
2

のセットにこれを分割する必要があります。初期設定:

Orders.Add(new Order() 
      { 
       id = 123, 
       date = new datetime(2012,03,26) 
       items = new OrderItems() 
         { 
         lineid = 1, 
         quantity = 3, 
         } 
      } 
+0

ありがとう、それは例の解決策かもしれませんが、私はオブジェクトの初期化中に何か方法があるかどうか尋ねています。 – Turbot

+1

@laptop、私はそれを実現します。 JaredParが言及したように、あなたの事例に期待していたことはできませんでした。これは、Jaredが提案したように、 – psubsee2003

関連する問題