سؤال

حسنا، لدي فئة مماثلة لما يلي ...

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 إلى newitems [].

ما في عداد المفقودين؟

هل كانت مفيدة؟

المحلول

أعتقد أنني قد أفتقد شيئا، ولكن newOrder.OrderItems.Add(newItem) يجب أن تعمل على ما يرام، وفقا ل Waht لديك في رسالتك.

فقط بعض أشياء nitpick الأخرى:

التعددية من فئة "البنود" غريب، إذا كان مجرد عنصر واحد فقط. ربما يكون هذا هو السبب في أنه بدا "موافق" لتعيين عنصر واحد إلى خاصية قائمة.

قد تكون قد قطعتها من مشاركتك، ولكن يجب وضع علامة كل فئة يتم تسليمها بواسطة WCF باعتبارها "DataContract"، وليس فقط أعضاء الفصل.

عند تهيئة الكائنات مثل هذا، أعتقد أنه يجعلها مهدها كثيرا اكتب المهبل:

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

إذا كانت NewItems الخاصة بك [] هي صفيف، فأنت بحاجة إلى القيام بذلك:

newOrder.OrderItems.AddRange(newItem.ToList<Items>());

لقد أعلنت newItems كما ACME.Items اكتب، ولكن OrderItems خاصية الخاص بك Order الطبقة أ List<Items>. وبعد هذه الأنواع غير قابلة للتحميل من واحد إلى آخر مباشرة. لذلك، مهمة newOrder.OrderItems = newItems يشبه محاولة القولList<Items> = Items. وبعد هذا غير ممكن بناء على الطبقات التي حددتها أعلاه. بدلا من ذلك، ستحتاج إلى إضافة إلى القائمة.

عندما يكون لديك قائمة ضمن قائمة، وفقدت طريقة الإضافة ()، يتمثل الحل البديل في إجراء قائمة جديدة، وإضافة العناصر، ثم قم بتعيين القائمة الداخلية إلى القائمة الجديدة. بدلا من:

outerList.innerList.Add(item)

..استعمال..

var newList = new List<ItemType>();
newList.Add(item);
outerList.innerList = newList;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top