2010-06-17 14 views
8

..LINQ uzantısı SelectMany 3.5 vs 4.0? Burada Darins öneri gördü

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

(process.getprocessesbyname())

.. ben biraz merak salmış ve .NET 3.5 ile VS2008 denedim - ve değişti sürece derleme vermedi beklendiği gibi - - orijinal öneri çalıştı Ben sorun vardı ve ben daha sonra bir VS2010 with.NET 4.0 ellerimi aldığımda bana olduğundan şüphelendiler önce ..

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

bazı Darins cevapları okumak zorunda için güzel.

Soruma soru: 3.5'dan 4.0'a ne oldu (bu yeni sözdizimi) mümkün mü? Uzatılmış (hmm) veya lambda sözdizimi için yeni kurallar mı?

+0

çalışır, ne derleyici hatası elde ettiniz? – Jacob

+0

@Jacob - good point :) 'System.Linq.Enumerable.SelectMany (System.Collections.Generic.IEnumerable , System.Func >) ', kullanımdan çıkarılamıyor. Tip argümanlarını açıkça belirtmeyi deneyin. – Moberg

+0

Serin! Bu olduğunda daima sinirlenmiştim. Bilmekte fayda var iyi oldu :) +1 – leppie

cevap

7

C# (C# 4.0 vs C# 3.0 ... .NET sürümünün değil.) Yeni sürümünde temsilci seçiminin çok daha akıllıca olduğu anlaşılıyor. Bu fikir VS2008'de mevcuttu, ancak sorun çözme sorunu yaşıyordu. Birden fazla aşırı yüklenme olduğunda kullanılacak yöntemin hangi sürümü. Yöntem derlemede seçildiğinden, bunun, .NET'in sürümüyle güncellenen derleyiciyle daha fazla ilgisinin olduğuna inanmak zorundayım. Büyük olasılıkla, VS2010'da .NET 2.0 için derlenen çözümlerle yeni aşırı yüklenme yeteneğini kullanabileceğinizi göreceksiniz. .NET 3.5 altında derlemeye çalıştım

Örneğin, bu VS2008

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

Tamam, çaba için çok teşekkürler :) – Moberg