سؤال

ويجب أن تنفذ خدمة الإنترنت التي تعرض قائمة من القيم (أعداد صحيحة، فئات مخصصة الخ). حل عملي بإرجاع List<T>، وفقا لFxCop أنه من الأفضل للعودة إلى Collection<T> أو ReadOnlyCollection<T>.

إذا اخترت لإرجاع ReadOnlyCollection<T>، تظهر خدمة ويب خطأ مثل:

<اقتباس فقرة>   

لتكون XML للتسلسل، يجب أن أنواع التي ترث من ICollection لها تنفيذ Add(System.Int32) على جميع مستويات التسلسل الهرمي الميراث.   System.Collections.ObjectModel.ReadOnlyCollection 1 [[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] لا يطبق Add(System.Int32).

ما هي الطريقة المفضلة لديك لاستخدام داخليا List<T> وفضح Collection<T>؟ (باستخدام C #، ويفضل أن يكون الإطار 2.0 فقط)

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

المحلول

وقائمة أو مجموعة على ما يرام في هذه القضية.

في شروط السؤال الأصلي، يمكنك لف لقائمة في مجموعة ببساطة شديدة:

List<Foo> list = new List<Foo>();
// ...
Collection<Foo> col = new Collection<Foo>(list);

وهذا هو مجمع صحيح. إضافة عنصر إلى المجمع (العقيد)، وأنه يحصل على إضافة إلى القائمة. هذا يمكن أن يكون مربكا بعض الشيء، لأن العديد من هذه المنشئات استخدام حجة للقيام السكان الأولي، ولكن لا تصل إلى القائمة الأصلية. جمع هو ؛-p استثناء

ومنذ كنت على الحدود الخدمة على شبكة الإنترنت، لا تنطبق هذه التوصية من FxCop. يمكن أن يكون مفيدا (متوافقة مع الأخيرة اريك ليبرت ل بلوق ) لمنع المتصل الدوس على الذاكرة المستدعى - ولكن في سيناريو شبكة الإنترنت الخدمات الموزعة التي ببساطة لا ينطبق. في الواقع، منذ خدمات الويب بوجود عدد قليل من القضايا الموثقة جيدا مع بعض السيناريوهات العامة، مجموعة بسيطة يمكن القول صالحة للاستعمال جدا وواقعية في حدود خدمة ويب. في سياق بلوق اريك - في هذه الحالة، ليس هناك شك في قضية الطالب / المستدعي، لأنه ليس هناك حاجز القسري بين البلدين.

في شروط WSDL / المكسيك، وأظن كل 3 (قائمة / جمع / مجموعة) ستصبح مجرد كتلة من العناصر - لذلك قد لتسير على ما يرام مع أيهما الأكثر ملاءمة

نصائح أخرى

وأنا عادة العودة IList من خدمة ويب WCF: FxCop سعيد بما فيه الكفاية مع هذا. لست متأكدا إذا كان هذا يعمل مع خدمات ويب ASMX.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top