2010-03-17 9 views
5

क्या कोड की विधि/रेखाओं को कई बार/foreach/loop का उपयोग नहीं करने का तरीका है?बिना किसी विधि/फोरैच के किसी विधि के माध्यम से लूपिंग/

उदाहरण के लिए

, अगर मैं पाश के लिए करने के लिए उपयोग करने के लिए किए गए:

int numberOfIterations = 6; 
for(int i = 0; i < numberOfIterations; i++) 
{ 
    DoSomething(); 
    SomeProperty = true; 
} 

कोड मैं का उपयोग नहीं करते 'i' और फोन कर रहा हूँ की तर्ज मेरी राय में पूरे पाश घोषणा छुपाता है कि मैं क्या ' मैं करने की कोशिश कर रहा हूँ। यह एक foreach के लिए एक ही है।

वहाँ एक पाशन बयान मुझे लगता है कि उपयोग कर सकते हैं अगर मैं सोच रहा था लग रहा है कि:

do(6) 
{ 
    DoSomething(); 
    SomeProperty = true; 
} 

यह वास्तव में स्पष्ट है कि मैं सिर्फ इतना है कि कोड को निष्पादित करने के 6 बार चाहता हूँ और वहाँ कोई शोर सूचकांक instantiating से जुड़े और 1 जोड़ने है कुछ मनमाना चर के लिए।

एक सीखने अभ्यास के रूप में मैं एक स्थिर वर्ग और विधि लिखा है:

Do.Multiple(int iterations, Action action) 

कौन सा मिथ्याभिमानी पैमाने पर लेकिन स्कोर काम करता है बहुत उच्च और मुझे यकीन है कि मेरे साथियों पसंद नहीं करेंगे हूँ।

शायद मैं सिर्फ चुनिंदा हूं और लूप निश्चित रूप से सबसे अधिक पहचानने योग्य है, लेकिन एक सीखने की बात के रूप में मैं सोच रहा था कि वहां (क्लीनर) विकल्प हैं या नहीं। धन्यवाद।

(मैं इस सूत्र पर एक नज़र लिया है, लेकिन यह काफी ही नहीं है) Using IEnumerable without foreach loop

+4

लूप के साथ चिपके रहें। इस तरह हर कोई जानता है कि यह क्या है। –

+2

हमम, आप एक ही कोड को 6 बार निष्पादित करना चाहते हैं? क्या आप बस समय बर्बाद करने की कोशिश कर रहे हैं, या निष्पादित कोड के दुष्प्रभाव हैं? किसी भी मामले में, आप पर शर्म की बात है। –

+0

मैं ईमानदारी से यह देखने में असफल रहा कि लूप के बारे में क्या साफ नहीं है। –

उत्तर

12

वास्तव में, for पाश छिपाने नहीं है कि आप क्या करने की कोशिश कर रहे हैं क्या।
कोई भी व्यक्ति जो आपका कोड पढ़ रहा है वह पहले से ही मानक for लूप से परिचित है और आप जो भी कर रहे हैं उसे तुरंत समझेंगे।

+1

मैं 100% से सहमत हूं लेकिन मैं 'नंबरऑफिटरेशंस' से छुटकारा पाउंगा क्योंकि यह वास्तव में इसे स्पष्ट नहीं करता है। – ChaosPandion

+0

मैंने केवल उस प्रश्न में नकली उदाहरण के हिस्से के रूप में उपयोग किया था। लेकिन वैध बिंदु – RichK

10

आप इसे एक विस्तार विधि बनाकर दिखावे पैमाने पर और भी अधिक अत्यधिक स्कोर कर सकते हैं:

public static void Times(this int iterations, Action action) 
{ 
    for (int i = 0; i < iterations; i++) 
    { 
     action(); 
    } 
} 
... 
6.Times(() => { 
    DoSomething(); 
    SomeProperty = true; 
}); 

लेकिन मैं निश्चित रूप से एक for पाश के साथ छड़ी होगी। यह करने का मूर्खतापूर्ण, अच्छी तरह से पहचाना जाने वाला तरीका है।

+0

इसे प्यार करें ... इसे कभी-कभी उपयोग करने का बहाना ढूंढना है :) – slugster

+0

वास्तव में अच्छा है। यह लगभग मोहक है: पी – RichK

+1

यह बिल्कुल सही तरीका है। हमने इसे अपनी टीम पर एक मानक बना दिया है। – DRBlaise

0

कैसे के बारे में एक करते हैं .... जब तक या अगर ... तो

पाश अंदर एक काउंटर का उपयोग करें और यह पाश है जब तक काउंटर तक पहुँच जाता है 6.

या एक if-then बयान के साथ एक काउंटर। यदि आपका मान 6 है, तो लूप से बाहर निकलें।

मैं प्रोग्रामिंग गुरु नहीं हूं, लेकिन यदि आपके पास ऐसी कोई कार्रवाई है जिसे एक निश्चित संख्या में करने की आवश्यकता है, तो काउंटर की आवश्यकता होगी, चाहे वह आपके लूप का कार्य हो या यदि उसके पास है एक काउंटर के साथ बनाया जाना है।

2
दृष्टि

private MethodDelegate MultiMethod(MethodDelegate m, int count) { 
    MethodDelegate a; 
    if (count > 0) { 
    a = m; 
    a += MultiMethod(m, --count); 
    } else { 
    a = delegate { }; 
    } 
    return a; 
} 

में

नहीं एक पाश और आप मंगलाचरण के लिए एक महान वाक्य रचना प्राप्त करें!

MultiMethod(action, 99)(); 
संबंधित मुद्दे