L'aggiunta di un elemento della lista all'interno di un'altra lista
-
12-09-2019 - |
Domanda
Ok ho una classe simile al seguente ...
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 ho di riferimento nel mio codice ho un metodo che prende in un elenco di "Ordine" come parametro.
ACME.Order newOrder = new ACME.Order();
ACME.Items newItems = new ACME.Items();
newOrder.ID = xxx
newItems.ItemName = xxx
SendOrderWithItemsFunction(newOrder)
È possibile che questo funziona bene però non ho una funzione aggiuntiva per i miei oggetti in modo che io possa fare qualcosa di simile al seguente
newOrder.Items.Add(newItem);
e
newOrder.Items = newItems
non funzionerà perché si dice che non è possibile convertire implicitamente newOrder.Items a newItems [].
Cosa mi manca?
Soluzione
Penso che potrei mancare qualcosa, ma newOrder.OrderItems.Add(newItem)
dovrebbe funzionare bene, secondo il livello qualitativo che hai nel tuo post.
Solo alcune altre cose nitpick:
La pluralizzazione della classe "Elementi" è strano, se è solo un singolo elemento. Questa è probabilmente la ragione che sembrava "ok" per assegnare un singolo elemento a una proprietà List.
Si può avere tagliato fuori del tuo post, ma ogni classe che si sta serializzato da WCF devono essere contrassegnati come "DataContract", non solo i membri della classe.
Quando l'inizializzazione degli oggetti come questo, penso che lo rende un cleaer sacco di utilizzare Tipo Inizializzatori :
var NewOrder = new ACME.Order{
ID = xxx,
OrderItems = new List<ACME.Item>
{
new ACME.Item{
ItemName = xxx
}
}
};
Altri suggerimenti
Quello che hanno è una funzione aggiuntiva nella vostra proprietà Order.OrderItems
:
newOrder.OrderItems.Add(newItem);
si può anche aggiungere tutta una serie di articoli ai vostri OrderItems:
var someList = new List<Items>();
//populate someList here
newOrder.OrderItems.AddRange(someList);
Si dovrebbe essere in grado di fare:
newOrder.OrderItems.Add(newItem);
Se i newItems [] è un array, è necessario fare questo:
newOrder.OrderItems.AddRange(newItem.ToList<Items>());
Hai dichiarato newItems
come un tipo ACME.Items
, ma la proprietà OrderItems
della classe Order
è un List<Items>
. Questi tipi non sono cedibili da uno all'altro direttamente. Così, la cessione del newOrder.OrderItems = newItems
è come cercare di sayList<Items> = Items
. Questo non è possibile in base alle classi che di cui sopra. Invece, è necessario aggiungere alla lista.
Quando si dispone di un elenco all'interno di un elenco, e il metodo Add () manca, una soluzione è quella di fare una nuova lista, aggiungere gli elementi, quindi impostare la lista interna per il nuovo elenco. Invece di:
outerList.innerList.Add(item)
.. uso ..
var newList = new List<ItemType>();
newList.Add(item);
outerList.innerList = newList;