2010-06-17 12 views
8

जब मैं Darins सुझाव यहां देखा ..LINQ एक्सटेंशन 3.5 बनाम 4.0 में चुनें?

IEnumerable<Process> processes = 
    new[] { "process1", "process2" } 
    .SelectMany(Process.GetProcessesByName); 

(process.getprocessesbyname())

.. मैं थोड़ा intrigued गया था और मैं में VS2008 इसे करने की कोशिश .NET 3.5 के साथ - और यह संकलन नहीं किया जब तक कि मैं बदल गया यह ..

IEnumerable<Process> res = 
    new string[] { "notepad", "firefox", "outlook" } 
    .SelectMany(s => Process.GetProcessesByName(s)); 

कुछ Darins उत्तर पढ़ चुके करने के लिए इससे पहले कि मैं शक था कि यह मेरे था कि समस्या थे, और जब मैं बाद में एक VS2010 with.NET 4.0 पर मेरे हाथ मिला - के रूप में उम्मीद - मूल सुझाव काम किया खूबसूरती से।

मेरा प्रश्न है: 3.5 से 4.0 तक क्या हुआ है जो यह (नया वाक्यविन्यास) संभव बनाता है? क्या यह एक्सटेंशन मोड है जो लैम्ब्डा सिंटैक्स के लिए विस्तारित (हम्म) या नए नियम हैं?

+0

में काम करता है जब आप .NET 3.5 के तहत यह संकलन करने की कोशिश की, क्या संकलक त्रुटि मिला? – Jacob

+0

@ जैकोब - अच्छा बिंदु :) विधि 'System.Linq.Enumerable.SelectMany (System.Collections.Generic.IEnumerable , System.Func >) 'उपयोग से अनुमानित नहीं किया जा सकता है। प्रकार तर्कों को स्पष्ट रूप से निर्दिष्ट करने का प्रयास करें। – Moberg

+0

कूल! जब यह हुआ तो मैं हमेशा नाराज था। यह जानना अच्छा है कि यह तय किया गया है :) +1 – leppie

उत्तर

7

ऐसा लगता है कि प्रतिनिधि चयन सी # (सी # 4.0 बनाम सी # 3.0 ... .NET के संस्करण नहीं) के नए संस्करण में अधिक बुद्धिमान है। यह विचार वीएस 2008 में उपलब्ध था, लेकिन इसमें समस्याएं हल हो रही थीं एकाधिक ओवरलोड होने पर उपयोग करने के लिए विधि का कौन सा संस्करण। विधि संकलन में चुना गया है, इसलिए मुझे विश्वास करना है कि .NET के संस्करण के मुकाबले अद्यतन संकलक के साथ इसका अधिक संबंध है। आपको शायद यह पता चलेगा कि आप VS2010 में .NET 2.0 के लिए संकलित समाधानों के साथ नई अधिभार क्षमता का उपयोग कर सकते हैं।

उदाहरण के लिए, इस VS2008

var ret = new[] { "Hello", "World", "!!!" }.Aggregate(Path.Combine); 
// this is the value of ret => Hello\World\!!! 
+0

ठीक है, प्रयास के लिए बहुत बहुत धन्यवाद :) – Moberg

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