2008-10-13 7 views
8

मुझे एक वेब सेवा लागू करनी होगी जो मूल्यों (पूर्णांक, कस्टम कक्षा आदि) की एक सूची का खुलासा करे। मेरा कामकाजी समाधान List<T> देता है, और FxCop के अनुसार Collection<T> या ReadOnlyCollection<T> वापस करना बेहतर होता है।सूची <T> का उपयोग करने का सर्वोत्तम तरीका और संग्रह <T>

मैं एक ReadOnlyCollection<T> वापस जाने के लिए चुनते हैं, तो वेब सेवा से पता चलता एक त्रुटि की तरह:

एक्सएमएल serializable होने के लिए, प्रकार जो ICollection से विरासत उनके वंशानुगत पदानुक्रम के सभी स्तरों पर Add(System.Int32) के एक कार्यान्वयन होना आवश्यक है। System.Collections.ObjectModel.ReadOnlyCollection1[[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]Add(System.Int32) लागू नहीं करता है।

आंतरिक रूप से एक List<T> का उपयोग करें और एक Collection<T> बेनकाब करने के लिए अपने पसंदीदा तरीका क्या है? (सी # का उपयोग कर, और अधिमानतः ढांचा 2.0 केवल)

उत्तर

14

सूची < टी > या संग्रह < टी > इस मामले में ठीक कर रहे हैं।

मूल प्रश्न के संदर्भ में, यदि आप एक संग्रह < टी > बहुत बस में एक सूची < टी > लपेट कर सकते हैं:

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

यह एक सच्ची आवरण है, रैपर (कोला) में एक आइटम जोड़ें, और यह सूची में जोड़ा जाता है। यह थोड़ा उलझन में हो सकता है, क्योंकि ऐसे कई निर्माता प्रारंभिक आबादी को करने के लिए तर्क का उपयोग करते हैं, लेकिन मूल सूची से लिंक नहीं करते हैं। संग्रह < टी > एक अपवाद है; -पी

चूंकि आप वेब-सेवा सीमा पर हैं, इसलिए FxCop से यह अनुशंसा लागू नहीं होती है। कैली की स्मृति पर कॉलर स्टॉम्पिंग को रोकने के लिए यह उपयोगी है (Eric Lippert's recent blog के साथ इनलाइन) - लेकिन एक वेब-सेवा वितरित परिदृश्य में जो बस लागू नहीं होता है। वास्तव में, चूंकि वेब-सेवाओं में कुछ सामान्य परिदृश्यों के साथ कुछ अच्छी तरह से प्रलेखित समस्याएं हैं, इसलिए एक सरल सरणी वेब-सेवा सीमा पर तर्कसंगत और व्यावहारिक है। एरिक के ब्लॉग के संदर्भ में - इस मामले में, कॉलर/कैली मुद्दे का कोई सवाल नहीं है, क्योंकि दोनों के बीच एक लागू बाधा है।

डब्ल्यूएसडीएल/मैक्स के संदर्भ में, मुझे संदेह है कि सभी 3 (सूची/संग्रह/सरणी) तत्वों का एक ब्लॉक बन जाएंगे - ताकि आप जो भी सबसे सुविधाजनक हो, अच्छी तरह से जा सकें।

+0

आपके उत्तर के लिए धन्यवाद और संग्रह के बारे में ब्योरे के लिए एक सच्चे रैपर के रूप में कार्य करने के बारे में, मुझे इसके बारे में कुछ भी नहीं मिला। – alexandrul

1

मैं आमतौर पर डब्लूसीएफ वेब सेवा से आईएलआईस्ट < टी > लौटाता हूं: FxCop इसके साथ काफी खुश है। यह सुनिश्चित नहीं है कि यह एएसएमएक्स वेब सेवाओं के साथ काम करता है।

+0

एएसएमएक्स वेब सेवाएं क्रमबद्ध नहीं होंगे (और रन-टाइम अपवाद देंगे) इंटरफेस। –