문제
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
NewOrder.ITEMS를 암시 적으로 변환 할 수 없다고 말하면 작동하지 않습니다.
무엇이 빠졌습니까?
해결책
나는 뭔가 빠진 것 같아요 newOrder.OrderItems.Add(newItem)
당신이 당신의 게시물에있는 waht에 따르면 잘 작동해야합니다.
다른 nitpick 물건 :
"항목"클래스의 복수화는 단일 항목 일 경우 더 이상합니다. 이것은 아마도 단일 항목을 목록 속성에 할당하는 것이 "확인"으로 보이는 이유 일 것입니다.
게시물에서 삭감했을 수도 있지만 WCF에 의해 직렬화되는 모든 클래스는 클래스 멤버뿐만 아니라 "데이터 코닝"으로 표시되어야합니다.
이와 같은 객체를 초기화 할 때, 나는 그것이 사용하기에 훨씬 더 Cleaer라고 생각합니다. 이니셜 라이저를 입력하십시오:
var NewOrder = new ACME.Order{
ID = xxx,
OrderItems = new List<ACME.Item>
{
new ACME.Item{
ItemName = xxx
}
}
};
다른 팁
당신이 가진 것은 당신의 추가 기능입니다 Order.OrderItems
재산:
newOrder.OrderItems.Add(newItem);
순서에 대한 전체 항목 목록을 추가 할 수도 있습니다.
var someList = new List<Items>();
//populate someList here
newOrder.OrderItems.AddRange(someList);
할 수 있어야합니다.
newOrder.OrderItems.Add(newItem);
최신 정보 []가 배열 인 경우 다음을 수행해야합니다.
newOrder.OrderItems.AddRange(newItem.ToList<Items>());
당신은 선언했습니다 newItems
로서 ACME.Items
유형이지만 OrderItems
당신의 재산 Order
수업은 a입니다 List<Items>
. 이러한 유형은 한쪽에서 다른 유형으로 직접 할당 할 수 없습니다. 따라서의 과제 newOrder.OrderItems = newItems
말하려고하는 것과 같습니다List<Items> = Items
. 위에서 설명한 수업을 기반으로 불가능합니다. 대신 목록에 추가해야합니다.
목록에 목록이 있고 add () 메소드가 없으면 해결 방법은 새 목록을 작성하고 항목을 추가 한 다음 내부 목록을 새 목록으로 설정하는 것입니다. 대신에:
outerList.innerList.Add(item)
..사용..
var newList = new List<ItemType>();
newList.Add(item);
outerList.innerList = newList;