2010-05-07 41 views
5

मेरे पास एक कक्षा है जिसमें वस्तुओं की एक स्थिर संख्या है। इस वर्ग को अन्य श्रेणियों में अक्सर 'तुलना' की आवश्यकता होती है जो सरल सूची वस्तुएं होंगी।मैं IENumerable कैसे कार्यान्वित करूं?

public partial class Sheet 
{ 
public Item X{ get; set; } 
public Item Y{ get; set; } 
public Item Z{ get; set; } 
} 

आइटम स्पष्ट रूप से "एक्स" "वाई" "जेड" नहीं होने जा रहे हैं, उदाहरण के लिए वे सामान्य नाम हैं। समस्या यह है कि किस चीज की आवश्यकता है, इसकी प्रकृति के कारण, एक सूची काम नहीं करेगी; भले ही यहां सबकुछ आइटम प्रकार का होगा। यह बहुत विशिष्ट चीजों की एक चेकलिस्ट की तरह है जिसे कोड और रनटाइम दोनों के खिलाफ परीक्षण किया जाना चाहिए।

यह सब ठीक और अच्छी तरह से काम करता है; यह मेरा मुद्दा नहीं है। मेरा मुद्दा इसे फिर से शुरू कर रहा है। उदाहरण के लिए मैं निम्नलिखित करना चाहता हूं ...

List<Item> UncheckedItems = // Repository Logic Here. 

अनचेकइटम में सभी उपलब्ध आइटम शामिल हैं; और चेकड इटम्स शीट क्लास इंस्टेंस है। चेक किए गए आइटम्स में ऐसी चीज़ें होंगी जिन्हें अनचेक से चेक किए गए स्थानांतरित किया गया था; हालांकि भंडारण प्रणाली की प्रकृति के कारण, चेक किए गए आइटम को अनचेक से हटाया नहीं जा सकता है। मैं बस "चेक किए गए" के माध्यम से पुन: प्रयास करना चाहता हूं और अनचेक में सूची से कुछ भी हटा सकता हूं जो पहले से ही "चेक किया गया" है।

तो स्वाभाविक रूप से, यह सामान्य सूची के साथ ऐसा होगा।

foreach(Item item in Unchecked) 
{ 
if(Checked.Contains(item)) 
Unchecked.Remove(item); 
} 

लेकिन चूंकि "शीट" एक 'सूची' नहीं है, इसलिए मैं ऐसा नहीं कर सकता। इसलिए मैं आईनेमरेबल को कार्यान्वित करना चाहता था ताकि मैं कर सकूं। कोई सुझाव? मैंने पहले कभी भी आईनेमेरेबल को लागू नहीं किया है और मैं कहां से शुरू करना है, इस बारे में बहुत उलझन में हूं।

उत्तर

12

आपको एक पुनरावर्तक बनाने की आवश्यकता है जो शीट में मौजूद आइटम लौटाता है।

Using Iterators

public partial class Sheet 
{ 
    public Item X{ get; set; } 
    public Item Y{ get; set; } 
    public Item Z{ get; set; } 

    public IEnumerable<Item> EnumerateItems() 
    { 
     yield return X; 
     yield return Y; 
     yield return Z; 
     // ... 
    } 
} 

आप विधि आप यह कर सकते हैं फोन करने के लिए नहीं करना चाहते हैं।

public partial class Sheet : IEnumerable<Item> 
{ 
    public Item X{ get; set; } 
    public Item Y{ get; set; } 
    public Item Z{ get; set; } 

    public IEnumerator<Item> GetEnumerator() 
    { 
     yield return X; 
     yield return Y; 
     yield return Z; 
     // ... 
    } 

    IEnumerator IEnumerator.GetEnumerator() 
    { 
     return GetEnumerator(); 
    } 
} 
+1

आप उन उपज विवरणों को सीधे GetEnumerator विधि में भी डाल सकते हैं। –

+0

@Steve - अब यह अच्छा है। – ChaosPandion

+0

@CoosPandion - यहां तक ​​कि यदि वस्तु वापस आती है तो इसे कैसे हटाया जा सकता है? सवाल यह भी नहीं है कि ऑब्जेक्ट को कैसे हटाया जाए? – Prashant

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