LINQ

2011-05-18 19 views
6

का उपयोग करके संख्याओं को मुद्रित करने के लिए मैं LINQ का उपयोग करके और किसी भी लूप के बिना प्राकृतिक संख्याओं को 1 से 100 तक प्रिंट करने का प्रयास कर रहा हूं। मैंने लिखा LINQ क्वेरी बिल्कुल भी संकलित नहीं है।LINQ

Console.WriteLine(from n in Enumerable.Range(1, 100).ToArray()); 

कृपया मेरी मदद करें।

+0

लूप पर क्या गलत है? यदि आपके पास लूप हैं, तो कार्यात्मक भाषा का उपयोग शुरू करें। – Euphoric

+0

आपका कोड संकलित क्यों नहीं करता है क्योंकि आपके पास अंत में 'चयन n' नहीं है। अगर आपने इसे जोड़ा तो भी होवे यह सिर्फ प्रकार के नाम को मुद्रित करेगा और यह वही नहीं है जो आप चाहते हैं। – StanislawSwierc

उत्तर

15

विधि वाक्य रचना:

Enumerable.Range(1, 100).ToList().ForEach(Console.WriteLine); 

क्वेरी सिंटैक्स:

(from n in Enumerable.Range(1, 100) select n) 
    .ToList().ForEach(Console.WriteLine); 

या, यदि आप एक अल्पविराम से अलग सूची चाहते हैं:

Console.WriteLine(string.Join(",", Enumerable.Range(1, 100))); 

यह एक String.Join<T>(String, IEnumerable<T>) अधिभार में पेश उपयोग करता है। नेट 4.0।

+3

फॉरएच सूची का हिस्सा है, LINQ नहीं। – Euphoric

+0

स्ट्रिंग.जॉइन विधि संकलित नहीं होती है क्योंकि फ़ंक्शन स्ट्रिंग की अपेक्षा करता है [] – AbrahamJP

+0

@AbrahamJP .NET 4.0 में कुछ अतिरिक्त ओवरलोड हैं, जिनमें ' शामिल हों (स्ट्रिंग, आईनेमेरेबल ) ' –

4

आपकी LINQ क्वेरी समाधान के करीब है, केवल कुछ tweaking की आवश्यकता है।

Console.WriteLine(String.Join(", ", (from n in Enumerable.Range(1, 100) select n.ToString()).ToArray())); 

आशा इस मदद करता है

1

इस प्रयास करें:

Enumerable.Range(1, 100).ToList().ForEach(x => Console.WriteLine(x)); 

तुम भी बजाय, पहली सूची में बदलने के लिए अगर आप थोड़ा बेहतर की इच्छा होने के IEnumerable के लिए एक विस्तार पद्धति के रूप में foreach जोड़ सकते हैं प्रदर्शन।

0

किसी भी लूप के बिना सरणी पर चलने के लिए यह असंभव है, आप सूची वर्ग के लिए फ़ॉरएच विस्तार विधि का उपयोग कर सकते हैं।

Enumerable.Range(1,100).ToList().ForEach(i => Console.WriteLine(i)); 

मैं जानता हूँ कि क्यों आप ऐसा करते हैं चाहते हैं नहीं है, लेकिन पाश आप से नहीं लिखा जा सकता है, लेकिन कोड के कुछ भाग में अंत में प्रस्तुत किया जाएगा।

संपादित करें: जहां छिपाने प्रस्तुत कहीं कुछ पाश या यहाँ तक कि दो होगा, अगर आप सिर्फ सभी तत्वों के माध्यम से पुनरावृति करना चाहते हैं किसी भी समाधान है, आप एक एक्सटेंशन बनाना चाहिए प्रत्येक

public static void ForEach<T>(this IEnumerable<T> enumeration, Action<T> action) 
{ 
    if (action == null) 
    { 
     ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match); 
    } 

    foreach(T item in enumeration) 
    { 
     action(item); 
    } 
} 
+0

हाँ आप सही हैं, लेकिन मैं लूप से बचने के लिए डेवलपर बिंदु दृश्य से देख रहा था। –

+0

छिपे हुए लूप लिखना बेहतर है, क्योंकि आप उनसे बच नहीं सकते हैं। –

0

LINQ के लिए क्वेरी है भाषा। यह केवल डेटा फ़िल्टर और परिवर्तित कर सकता है। यह कि LINQ के लिए क्या इरादा है। बेशक कुछ फॉरएच एक्सटेंशन होंगे, लेकिन यह LINQ का हिस्सा नहीं है।

और बस आपको सही करने के लिए, LINQ में लूप हैं, सिवाय इसके कि वे आपकी दृष्टि से छिपे हुए हैं।

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