Frage

Ok Ich habe eine Klasse ähnlich den folgenden ...

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

}

Wenn ich in meinem Code verweisen habe ich eine Methode, die in einer „Order“ -Liste als Parameter übernimmt.

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

newOrder.ID = xxx
newItems.ItemName = xxx

SendOrderWithItemsFunction(newOrder)

Das oben funktioniert aber feine ich so nicht ein Add-Funktion für meine Einzelteile haben, dass ich so etwas wie das folgende

tun können
newOrder.Items.Add(newItem);

und

newOrder.Items = newItems

wird nicht funktionieren, weil sie sagt, dass es nicht implizit newOrder.Items zu newItems umwandeln kann [].

Was ist?

War es hilfreich?

Lösung

Ich glaube, ich könnte etwas fehlen, aber newOrder.OrderItems.Add(newItem) sollte gut funktionieren, nach waht Sie in Ihrem Beitrag haben.

Nur ein paar andere Dinge nitpick:

Die Pluralisierung der „Item“ Klasse ist sonderbar, wenn es nur ein einzelne Element ist. Dies ist wahrscheinlich der Grund dafür, dass es „ok“ sah ein einzelnes Element zu einer List-Eigenschaft zuweisen.

Sie haben es aus Ihrem Post geschnitten, aber jede Klasse, die von WCF serialisiert werden muss als „Datacontract“, nicht nur die Mitglieder der Klasse gekennzeichnet werden.

Wenn Objekte wie diese Initialisierung, ich glaube, es es viel cleaer benutzen Geben Sie Initializers :

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

Andere Tipps

Was Sie tun müssen, ist eine Add-Funktion in Ihrer Order.OrderItems Eigenschaft:

newOrder.OrderItems.Add(newItem);

Sie können sogar eine ganze Liste von Elementen zu Ihren Orderitem hinzufügen:

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

Sie sollten in der Lage sein zu tun:

newOrder.OrderItems.Add(newItem);

Wenn Ihr newItems [] ein Array ist, müssen Sie dies tun:

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

Sie haben newItems als ACME.Items Typ deklariert, aber die OrderItems Eigentum Ihrer Order-Klasse ist ein List<Items>. Diese Typen sind nicht übertragbar von einem zum anderen direkt. So ist eine Zuordnung von newOrder.OrderItems = newItems wie zu sayList<Items> = Items versuchen. Das ist nicht möglich, auf der Grundlage der Klassen, die Sie oben beschrieben. Stattdessen müssen Sie in die Liste hinzuzufügen.

Wenn Sie eine Liste innerhalb einer Liste haben, und die Methode Add () fehlt, wird eine Abhilfe ist eine neue Liste zu machen, um die Elemente hinzuzufügen, stellen Sie dann die innere Liste auf die neue Liste. Statt:

outerList.innerList.Add(item)

.. Verwendung ..

var newList = new List<ItemType>();
newList.Add(item);
outerList.innerList = newList;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top