質問
[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; }
}
}
私は私のコードで参照する場合私は、パラメータとして「注文」リストに取るメソッドを持っています。
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
それは暗黙的に[] newItemsにnewOrder.Itemsを変換することはできませんと言っているので、動作しません。
何をしないのですか?
解決
私は何かが足りないかもしれないと思うが、newOrder.OrderItems.Add(newItem)
はあなたのポストを持っているWAHTによると、うまく動作するはずです。
ただ、他のいくつかのnitpick物事ます:
それは単一の項目のみである場合は、「アイテム」クラスの複数形は、奇妙です。これはおそらく、それはリストプロパティに単一の項目を割り当てるには、「OK」に見えた理由です。
クラスのメンバーだけでなく、あなたはあなたのポストの外にそれをカットしているかもしれませんが、WCFによってシリアライズされているすべてのクラスは、「のDataContract」としてマークされている必要があります。
このようなオブジェクトを初期化するとき、私が思うには、を使用するように多くのcleaerます初期化子に入力します:
var NewOrder = new ACME.Order{
ID = xxx,
OrderItems = new List<ACME.Item>
{
new ACME.Item{
ItemName = xxx
}
}
};
他のヒント
あなたが持っていることはあなたのOrder.OrderItems
プロパティに追加機能があります:
newOrder.OrderItems.Add(newItem);
あなたも、あなたのOrderItemsに項目のリスト全体を追加することができます:
var someList = new List<Items>();
//populate someList here
newOrder.OrderItems.AddRange(someList);
あなたが行うことができるはずます:
newOrder.OrderItems.Add(newItem);
あなたのnewItems []が配列の場合は、、あなたがこれを行う必要があります:
newOrder.OrderItems.AddRange(newItem.ToList<Items>());
あなたはnewItems
型としてACME.Items
を宣言したが、あなたのOrderItems
クラスのOrder
プロパティがList<Items>
です。これらのタイプは、直接、他の1つから割り当て可能ではありません。だから、newOrder.OrderItems = newItems
の割り当てはsayList<Items> = Items
しようとしているようなものです。それはあなたが上記で概説したクラスに基づくことはできません。代わりに、リストに追加する必要があります。
、回避策は、新しいリストを作成する項目を追加し、その後、新しいリストに内側のリストを設定することです。代わりに:
outerList.innerList.Add(item)
..使用..
var newList = new List<ItemType>();
newList.Add(item);
outerList.innerList = newList;