Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Object and Collection Initializers - assign self?

Tags:

c#

.net

I'm using object and collection Initializers in the program and thinking how to get the example below.

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.
                          }
                 }

How can I assign the newly created order to the order item?

like image 999
Turbot Avatar asked Mar 26 '12 19:03

Turbot


2 Answers

What you're trying to here isn't possible. You can't refer to the object being constructed from within an object initializer body. You will need to break this up into a set of separate steps

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);
like image 172
JaredPar Avatar answered Nov 05 '22 15:11

JaredPar


If Order.items is a property, you can put something like this in the property setter

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

Then you can just take the order out of the initializer:

Orders.Add(new Order()
           {
              id = 123,
              date = new datetime(2012,03,26)
              items = new OrderItems()
                      { 
                         lineid = 1,
                         quantity = 3,
                      }
             }
like image 2
psubsee2003 Avatar answered Nov 05 '22 13:11

psubsee2003