أفضل طريقة لاستخدام قائمة وتعريض مجموعة
-
10-07-2019 - |
سؤال
ويجب أن تنفذ خدمة الإنترنت التي تعرض قائمة من القيم (أعداد صحيحة، فئات مخصصة الخ).
حل عملي بإرجاع 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);
وهذا هو مجمع صحيح. إضافة عنصر إلى المجمع (العقيد)، وأنه يحصل على إضافة إلى القائمة. هذا يمكن أن يكون مربكا بعض الشيء، لأن العديد من هذه المنشئات استخدام حجة للقيام السكان الأولي، ولكن لا تصل إلى القائمة الأصلية. جمع
ومنذ كنت على الحدود الخدمة على شبكة الإنترنت، لا تنطبق هذه التوصية من FxCop. يمكن أن يكون مفيدا (متوافقة مع الأخيرة اريك ليبرت ل بلوق ) لمنع المتصل الدوس على الذاكرة المستدعى - ولكن في سيناريو شبكة الإنترنت الخدمات الموزعة التي ببساطة لا ينطبق. في الواقع، منذ خدمات الويب بوجود عدد قليل من القضايا الموثقة جيدا مع بعض السيناريوهات العامة، مجموعة بسيطة يمكن القول صالحة للاستعمال جدا وواقعية في حدود خدمة ويب. في سياق بلوق اريك - في هذه الحالة، ليس هناك شك في قضية الطالب / المستدعي، لأنه ليس هناك حاجز القسري بين البلدين.
في شروط WSDL / المكسيك، وأظن كل 3 (قائمة / جمع / مجموعة) ستصبح مجرد كتلة من العناصر - لذلك قد لتسير على ما يرام مع أيهما الأكثر ملاءمة
نصائح أخرى
وأنا عادة العودة IList