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?

È stato utile?

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top