2

OK、次のようなクラスがあります...

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

}

コードで参照すると、「Order」リストをパラメーターとして受け取るメソッドがあります。

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

newOrder.ID = xxx
newItems.ItemName = xxx

SendOrderWithItemsFunction(newOrder)

上記は正常に機能しますが、アイテムの追加機能がないため、次のようなことができます

newOrder.Items.Add(newItem);

newOrder.Items = newItems

newOrder.Items を newItems[] に暗黙的に変換することはできないと言われているため、機能しません。

何が欠けていますか?

4

5 に答える 5

5

私は何かが欠けているかもしれないと思いnewOrder.OrderItems.Add(newItem)ますが、あなたの投稿にあるものによると、うまくいくはずです。

他のちょっとしたこと:

「アイテム」クラスの複数形は、それが単一のアイテムのみである場合、奇妙です。これがおそらく、単一の項目を List プロパティに割り当てることが「OK」に見える理由です。

投稿から切り取ったかもしれませんが、クラスのメンバーだけでなく、WCF によってシリアル化されているすべてのクラスを "DataContract" としてマークする必要があります。

このようにオブジェクトを初期化するときは、 Type Initializersを使用する方がはるかに明確になると思います:

var NewOrder = new ACME.Order{
     ID = xxx,
     OrderItems = new List<ACME.Item>
     {
          new ACME.Item{
               ItemName = xxx
          }
     }
};
于 2009-12-04T05:26:00.343 に答える
0

newItemsとして宣言しましたが、クラスのプロパティは. これらのタイプは、一方から他方に直接割り当てることはできません。つまり、 の代入はを言おうとするようなものです。上記で概説したクラスに基づいて、それは不可能です。代わりに、リストに追加する必要があります。ACME.ItemsOrderItemsOrderList<Items>newOrder.OrderItems = newItemsList<Items> = Items

于 2009-12-04T05:19:07.093 に答える
0

あなたが持っているのは、あなたのOrder.OrderItemsプロパティに追加機能です:

newOrder.OrderItems.Add(newItem);

アイテムのリスト全体を OrderItems に追加することもできます:

var someList = new List<Items>();
//populate someList here
newOrder.OrderItems.AddRange(someList);
于 2009-12-04T05:20:43.987 に答える
0

あなたはできるはずです:

newOrder.OrderItems.Add(newItem);

newItems[] が配列の場合、これを行う必要があります。

newOrder.OrderItems.AddRange(newItem.ToList<Items>());
于 2009-12-04T05:18:41.633 に答える