2011-08-29 12 views
13

यह IEnumerable आवेदन चौड़ा उपयोग करने के लिए जब भी आप वास्तव में जोड़ने के लिए या चीजों को दूर लेकिन उनमें गणना की जरूरत नहीं है एक अच्छा अभ्यास है?IEnumerable और अच्छे व्यवहार (और WCF)

साइड प्रश्न: क्या आपको कभी भी डब्ल्यूसीएफ सेवा से IEnumerable<T> लौटने में कोई समस्या है? क्या इससे ग्राहक अनुप्रयोगों में समस्याएं आ सकती हैं? आखिरकार, मुझे लगता है कि एक सरणी के लिए serialized किया जाएगा।

+1

शायद आपको यह जोड़ना चाहिए कि आप किस भाषा के बारे में बात कर रहे हैं? यह एक .NET-only साइट नहीं है, सभी के बाद ... –

+0

आपका अधिकार सही है। धन्यवाद। – User

+2

हालांकि यह ** नहीं एक सटीक डुप्लिकेट ** है, मैं अभी भी सुझाव है कि आप इस सवाल पर एक नजर है: http://stackoverflow.com/questions/1072614/should-i-always-return-ienumerablet-instead-of -लिस्ट – yas4891

उत्तर

1

मेरे पास कोई अच्छा व्यवहार स्रोत नहीं है, लेकिन मैं अक्सर अपने संग्रह के लिए सूची पर भरोसा करता हूं और यह आईनेमरेबल लागू करता है लेकिन मैं इसे एक सूची के रूप में पास करता हूं और एक आईनेमरेबल नहीं, अगर मुझे इसे पढ़ने की आवश्यकता है केवल मैं केवल एक readOnlyCollection पास .. ..

1

मैं IList<T> या List<T> वापस लौटने या स्वीकार करना पसंद नहीं करता क्योंकि वे संग्रह को संशोधित करने की क्षमता का तात्पर्य करते हैं।

इसलिए T[] को निश्चित आकार के संग्रह के रूप में वापस करना पसंद करते हैं। इसके अलावा सरणी को किसी भी अन्य ढांचे, प्लेटफॉर्म इत्यादि में आसानी से मैप किया जा सकता है।

और IEnumerable<T> स्वीकार करना पसंद करते हैं कि एक विधि उस संग्रह को गिनती करेगी।

+3

टी [] केवल पढ़ने-योग्य संग्रह नहीं है: आप किसी सरणी के तत्वों को संशोधित कर सकते हैं। इसके विपरीत, IList एक संग्रह संशोधित करने की क्षमता संकेत नहीं करता है - जैसे IList IsReadOnly केवल ReadOnlyCollection के लिए सच है। तो यह महत्वपूर्ण है कि कॉल करने लौटे संग्रह को संशोधित नहीं, यह शायद सबसे अच्छा है IList लौट सकते हैं और अपरिवर्तनीय वस्तुओं की एक ReadOnlyCollection के रूप में लागू करने के लिए। – Joe

+0

@Joe: आप सही कर रहे हैं। केवल पढ़ने के लिए नहीं। बस निश्चित आकार। – abatishchev

12

मैं केवल IEnumerable<T> लौटाता हूं जब मैं कॉलर को संकेत देना चाहता हूं कि कार्यान्वयन आलसी मूल्यांकन का उपयोग कर सकता है। अन्यथा, मैं आमतौर पर IList<T> या ICollection<T> लौटाता हूं, और परिणाम को पढ़ने के लिए ReadOnlyCollection<T> के रूप में कार्यान्वित किया जाता है।

आलसी मूल्यांकन एक महत्वपूर्ण विचार हो सकता है: यदि आपका कार्यान्वयन अपवाद फेंक सकता है, तो यह तब तक नहीं फेंक दिया जाएगा जब तक कॉलर परिणाम की गणना शुरू नहीं कर लेता है। IList<T> या ICollection<T> लौटकर, आप गारंटी दे रहे हैं कि जिस विधि को विधि कहा जाता है उस पर कोई अपवाद फेंक दिया जाएगा।

डब्ल्यूसीएफ विधि के मामले में, आलसी मूल्यांकन का उपयोग करने वाली विधि से IEnumerable<T> लौटने का अर्थ है कि आपकी प्रतिक्रिया को धारावाहिक होने तक कोई अपवाद नहीं फेंक दिया जा सकता है - जिससे आपको सर्वर-साइड को संभालने का कम मौका मिलता है।

संबंधित मुद्दे