Hinzufügen ein Listenelement in einer anderen Liste
-
12-09-2019 - |
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önnennewOrder.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?
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;