Question

Ok j'ai une classe similaire à ce qui suit ...

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

}

Quand je fais référence dans mon code, j'ai une méthode qui prend dans une liste « Ordre » comme paramètre.

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

newOrder.ID = xxx
newItems.ItemName = xxx

SendOrderWithItemsFunction(newOrder)

Les travaux ci-dessus bien mais je n'ai pas une fonction d'ajout de mes articles pour que je puisse faire quelque chose comme ce qui suit

newOrder.Items.Add(newItem);

et

newOrder.Items = newItems

ne fonctionnera pas car il dit qu'il ne peut pas convertir implicitement newOrder.Items à newItems [].

Qu'est-ce que je manque?

Était-ce utile?

La solution

Je pense que je pourrais manquer quelque chose, mais newOrder.OrderItems.Add(newItem) devrait fonctionner parfaitement, selon waht que vous avez dans votre message.

Juste quelques autres choses pinailler:

La pluralisation de la classe « Items » est wierd, si elle est un seul élément. Ceci est probablement la raison pour laquelle il avait l'air « ok » pour attribuer un seul élément à une propriété de la liste.

Vous avez peut-être couper de votre poste, mais chaque classe qui est publié en feuilleton par WCF doit être marqué comme « DataContract », pas seulement les membres de la classe.

Lors de l'initialisation des objets comme celui-ci, je pense qu'il fait beaucoup cleaer utiliser Tapez Initialiseur :

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

Autres conseils

Qu'est-ce que vous avez est une fonction d'ajout dans votre propriété Order.OrderItems:

newOrder.OrderItems.Add(newItem);

vous pouvez même ajouter une liste complète des articles à votre OrderItems:

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

Vous devriez être en mesure de le faire:

newOrder.OrderItems.Add(newItem);

Si votre newItems [] est un tableau, vous devez faire ceci:

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

Vous avez déclaré newItems comme un type de ACME.Items, mais la propriété OrderItems de votre classe Order est un List<Items>. Ces types ne sont pas cessibles de l'un à l'autre directement. Ainsi, une mission de newOrder.OrderItems = newItems est comme essayer de sayList<Items> = Items. Ce n'est pas possible sur la base des cours que vous avez décrites ci-dessus. , Vous devez ajouter les à la liste.

Lorsque vous avez une liste dans une liste, et la méthode Add () est manquante, une solution de contournement est de faire une nouvelle liste, ajoutez les éléments, puis définissez la liste intérieure à la nouvelle liste. Au lieu de:

outerList.innerList.Add(item)

.. utiliser ..

var newList = new List<ItemType>();
newList.Add(item);
outerList.innerList = newList;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top