2012-02-26 17 views
13

यह मेरी कक्षामैं कक्षा को पुन: प्रयोज्य कैसे बना सकता हूं?

public class csWordSimilarity 
{ 
    public int irColumn1 = 0; 
    public int irColumn2 = 0; 
    public int irColumn3 = 0; 
    public int irColumn4 = 0; 
    public int irColumn5 = 0; 
} 

है मैं नीचे

foreach (int irVal in myVarWordSimilarity) 
{ 

} 

myVarWordSimilarity उस वर्ग iterable रास्ता की तरह इस्तेमाल किया जा रहा बनाना चाहते csWordSimilarity प्रकार है। तो मैं सभी सार्वजनिक int चर को पुन: सक्रिय करना चाहता हूं। मुझे csWordSimilarity कक्षा को ऊपर के तरीके की तरह इसे पुन: प्रयोज्य बनाने के लिए संशोधित करने की आवश्यकता कैसे है।

+1

क्या कोई कारण है कि आप 'सूची ' का उपयोग नहीं करेंगे? यदि हां, तो IENumerable लागू करने पर विचार करें। –

+0

कृपया "सी #" और अपने शीर्षकों को शामिल न करें। टैग के लिए यही है। –

+0

संदर्भ: [कस्टम ऑब्जेक्ट्स के साथ फ़ोरैच लूप का उपयोग कैसे करें] (http://stackoverflow.com/a/348977/1004522)। इसके माध्यम से जाएं और जब भी आप चाहें उपयोग को समझने में मदद करेंगे। –

उत्तर

21

आप IEnumerable लागू कर सकते हैं और GetEnumerator ओवरराइड एक "इटरेटर" लौटने का उपयोग कर चर पर है yield कथन

class csWordSimilarity : IEnumerable<int> 
{ 
    private int _var1 = 1; 
    private int _var2 = 1; 
    private int _var3 = 1; 
    private int _var4 = 1; 

    public IEnumerator<int> GetEnumerator() 
    { 
     yield return _var1; 
     yield return _var2; 
     yield return _var3; 
     yield return _var4; 
    } 

    IEnumerator IEnumerable.GetEnumerator() 
    { 
     return GetEnumerator(); 
    } 
} 
+0

उत्तर देने के लिए बहुत बहुत धन्यवाद, हालांकि आपका समाधान "जेनेरिक प्रकार का उपयोग कर सिस्टम" त्रुटि दे रहा है। चयन। जेनेरिक.आईइनेमेरेटर '1 प्रकार के तर्क की आवश्यकता है " – MonsterMMORPG

+1

.NET का कौन सा संस्करण आप उपयोग कर रहे हैं? मैं उस त्रुटि को दोहराने का एक तरीका नहीं सोच सकता क्योंकि .NET 4 आपको टेम्पलेट प्रकार की परिभाषा को छोड़ने की अनुमति देता है, इसलिए यह एक IENumerable बन जाएगा – edvaldig

8

लागू IEnumerableUsing Iterators (C# Programming Guide)

देखें आपके मामले में आप सिर्फ इसलिए की तरह एक List के अंतर्निहित इटरेटर इस्तेमाल कर सकते हैं:

using System; 
using System.Collections.Generic; 

class csWordSimilarity : IEnumerable<int> { 
    public int irColumn1 = 0; 
    public int irColumn2 = 0; 
    public int irColumn3 = 0; 
    public int irColumn4 = 0; 
    public int irColumn5 = 0; 

    public IEnumerator<int> GetEnumerator() { 
     return (new List<int>() { 
      irColumn1, irColumn2, irColumn3, irColumn4, irColumn5 
     }).GetEnumerator(); 
    } 
    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { 
     return GetEnumerator(); 
    } 
} 
+0

इसके एक गणक को वापस करने के एकमात्र उद्देश्य के लिए एक नई सूची उदाहरण को तत्काल करने में काफी ऊंचा है, उपज बयान इसे सरल बनाता है और अधिक अनुकूल है। – edvaldig

+0

@edvaldig मुझे लगता है कि यह वरीयता का मामला है। यदि आप इस लाखों बार कॉल करने जा रहे हैं, तो हाँ प्रत्यक्ष 'उपज' का उपयोग करें। अन्यथा मैं बीसीएल कक्षाओं और विशेष रूप से 'सूची' का उपयोग करना पसंद करता हूं जहां सुविधाजनक। –

+0

हाँ मैं इसे लाखों बार उपयोग करने जा रहा हूं :) एडवल्डिग – MonsterMMORPG

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