Pregunta

Ok tengo una clase similar al siguiente ...

public class Order
{
    private Guid id;
    [DataMember]
    public Guid ID
    {
        get { return id; }
        set { id = value; }
    }

    private List<Items> orderItems;
    [DataMember]
    public List<Items> OrderItems
    {
        get { return orderItems; }
        set { orderItems= value; }
    }

}

public class Items
{
    private string itemName;
    [DataMember]
    public string ItemName
    {
        get { return itemName; }
        set { itemName = value; }
    }

}

Cuando hago referencia en mi código que tengo un método que toma en una lista de "orden" como parámetro.

ACME.Order newOrder = new ACME.Order();
ACME.Items newItems = new ACME.Items();

newOrder.ID = xxx
newItems.ItemName = xxx

SendOrderWithItemsFunction(newOrder)

Lo anterior funciona bien sin embargo no tengo una función de complemento de mis artículos para que pueda hacer algo como lo siguiente

newOrder.Items.Add(newItem);

y

newOrder.Items = newItems

no funcionará porque dice que no puede convertir implícitamente a newOrder.Items newitems [].

¿Qué me falta?

¿Fue útil?

Solución

Creo que podría estar perdiendo algo, pero newOrder.OrderItems.Add(newItem) debería funcionar bien, de acuerdo con waht que tiene en su puesto.

Sólo algunas otras cosas nitpick:

La pluralización de la clase "Elementos" es extraño, si se trata de un solo artículo. Esta es probablemente la razón por la que se veía "ok" para asignar un único elemento a una propiedad de lista.

Es posible que haya que cortar fuera de su puesto, pero cada clase que se publica por entregas por la WCF debe estar marcado como "DataContract", no sólo a los miembros de la clase.

Al inicializar objetos de este tipo, creo que se convierte en una gran cantidad cleaer usar Tipo Inicializadores :

var NewOrder = new ACME.Order{
     ID = xxx,
     OrderItems = new List<ACME.Item>
     {
          new ACME.Item{
               ItemName = xxx
          }
     }
};

Otros consejos

Lo que sí tenemos es una función de complemento en su propiedad Order.OrderItems:

newOrder.OrderItems.Add(newItem);

incluso se puede añadir toda una lista de artículos a sus artículos de pedido:

var someList = new List<Items>();
//populate someList here
newOrder.OrderItems.AddRange(someList);

Usted debe ser capaz de hacer:

newOrder.OrderItems.Add(newItem);

Si sus newitems [] es una matriz, que tiene que hacer esto:

newOrder.OrderItems.AddRange(newItem.ToList<Items>());

Usted ha declarado como un tipo newItems ACME.Items, pero la propiedad OrderItems de la clase Order es un List<Items>. Esos tipos no son asignables de uno a otro directamente. Por lo tanto, la cesión de newOrder.OrderItems = newItems es como tratar de sayList<Items> = Items. Eso no es posible en función de las clases que se describe anteriormente. En su lugar, tendrá que añadir a la lista.

Cuando usted tiene una lista dentro de una lista, y el método Add () no se encuentra, una solución consiste en hacer una nueva lista, añadir los elementos, a continuación, la lista de interior para la nueva lista. En lugar de:

outerList.innerList.Add(item)

.. uso ..

var newList = new List<ItemType>();
newList.Add(item);
outerList.innerList = newList;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top