Pergunta

Ok eu tenho uma classe semelhante ao seguinte ...

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

}

Quando eu referência no meu código eu tenho um método que leva em uma lista de "Ordem" como o parâmetro.

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

newOrder.ID = xxx
newItems.ItemName = xxx

SendOrderWithItemsFunction(newOrder)

As obras acima bem no entanto eu não tenho uma função add para os meus itens para que eu possa fazer algo como o seguinte

newOrder.Items.Add(newItem);

e

newOrder.Items = newItems

não vai funcionar porque ele diz que não pode converter implicitamente newOrder.Items para newitems [].

O que estou ausente?

Foi útil?

Solução

Eu acho que poderia estar faltando alguma coisa, mas newOrder.OrderItems.Add(newItem) deve funcionar muito bem, de acordo com waht você tem em seu post.

Apenas algumas outras coisas Nitpick:

A pluralização da classe "Itens" é estranho, se é apenas um único item. Esta é provavelmente a razão que parecia "ok" para atribuir um único item a uma propriedade de lista.

Você pode ter cortá-la fora de seu post, mas cada classe que está sendo serializado pelo WCF deve ser marcado como um "DataContract", não apenas os membros da classe.

Ao inicializar objetos como este, eu acho que o torna um cleaer monte de usar tipo Initializers :

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

Outras dicas

O que você tem é uma função add em sua propriedade Order.OrderItems:

newOrder.OrderItems.Add(newItem);

Você pode até mesmo adicionar uma lista de itens para seus OrderItems:

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

Você deve ser capaz de fazer:

newOrder.OrderItems.Add(newItem);

Se seus newitems [] é um array, você precisa fazer o seguinte:

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

Você declarou newItems como um tipo ACME.Items, mas a propriedade OrderItems de sua classe Order é um List<Items>. Esses tipos não são transmissíveis de um para o outro diretamente. Assim, uma cessão de newOrder.OrderItems = newItems é como tentar sayList<Items> = Items. Isso não é possível com base nas classes que você descritos acima. Em vez disso, você vai precisar adicionar à lista.

Quando você tem uma lista dentro de uma lista, e o método Add () está faltando, uma solução alternativa é fazer uma nova lista, adicionar os itens, em seguida, definir a lista interna para a nova lista. Em vez de:

outerList.innerList.Add(item)

.. uso ..

var newList = new List<ItemType>();
newList.Add(item);
outerList.innerList = newList;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top