2010-08-06 14 views
12

विधि उपज रिटर्न स्टेटमेंट के माध्यम से IENumerable लौटाता है।यदि उपज वापसी कभी नहीं होती है, तो शून्य वापस आ जाता है?

यदि उपज कथन कभी नहीं होता है (यह सशर्त तर्क के अंदर है), क्या विधि शून्य वापस आ जाएगी, या क्या यह 0 की गणना के साथ एक संख्यात्मक वापस आ जाएगी?

उत्तर

16

एक मान्य आईनेमरेबल जो आपके द्वारा पुन: उत्पन्न होने पर कोई मूल्य नहीं बनाता है।

बस इसके बारे में सोचें: आप एक परिवर्तनीय में IENumerable जनरेटर को स्टोर कर सकते हैं - कोड वास्तव में निष्पादित हो जाता है जब आप वास्तव में परिणामों के माध्यम से पुन: प्रयास करते हैं। यदि आपके पास null था तो आप कोड को कैसे निष्पादित कर सकते हैं? या आप कैसे जानते हैं फ़ंक्शन इसे चलाने के बिना कुछ भी उत्पन्न नहीं करता है।

8

उत्तरार्द्ध - आप GetEnumerator() करने में सक्षम होने जा रहे हैं इससे कोई फर्क नहीं पड़ता कि, गणना करने के लिए कोई आइटम नहीं होगा। यह Enumerable.Empty<T> के बराबर है।() साथ आया था System.Linq.Enumerable.Empty पहले

public static IEnumerable<T> EmptyEnum<T>() 
{ 
    yield break; 
} 

:

1

दरअसल, 2.0 कोडर जो enumerations का भारी इस्तेमाल की ओर leant के अपने उपकरणकिटें में एक मानक टुकड़ा होगा। बहुत से मामलों में बहुत उपयोगी, अक्सर ठीक है क्योंकि यह शून्य वापस नहीं आता है। उदाहरण के लिए, यदि GetIntEnum() कुछ प्रकार के आईनेमरेबल प्रकार को वापस कर सकता है लेकिन शून्य भी लौटा सकता है, तो GetIntEnum() ?? Enumerable.Empty<T>() हमें ऐसा कुछ देता है जो हमेशा गणना करने के लिए सुरक्षित रहता है (यह मानते हुए कि यह नल परिणामों के मामले में वांछित व्यवहार है)।