Когда я видел предложение Darins здесь..
IEnumerable processes =
new[] { "process1", "process2" }
.SelectMany(Process.GetProcessesByName);
(process.getprocessesbyname ())
.. Я был немного заинтригован, и я попробовал его в VS2008 с.NET 3.5 - и это не сделало компиляции, если я не изменил его на..
IEnumerable res =
new string[] { "notepad", "firefox", "outlook" }
.SelectMany(s => Process.GetProcessesByName(s));
Прочитав некоторые ответы Darins, прежде чем я подозревал, что это был я, которые были проблемой, и когда я позже достал VS2010 with.NET 4.0 - как ожидалось - исходное предложение работало красиво.
Мой вопрос: Что произошло от 3,5 до 4,0, который делает это (новый синтаксис) возможный? Действительно ли это - extensionmethods, которые были расширены (хм) или новые правила для синтаксиса лямбды или?
Похоже, что в новой версии C # выбор делегата стал намного более интеллектуальным (C # 4.0 против C # 3.0 ... не в версии .NET). Эта идея была доступна в VS2008, но при ее разрешении возникли проблемы. версия метода, используемого при нескольких перегрузках. Метод выбирается при компиляции, поэтому я полагаю, что это больше связано с обновленным компилятором, чем с версией .NET. Вы, вероятно, обнаружите, что можете использовать новую возможность перегрузки с решениями, скомпилированными для .NET 2.0 в VS2010.
Например, это работает в VS2008
var ret = new[] { "Hello", "World", "!!!" }.Aggregate(Path.Combine);
// this is the value of ret => Hello\World\!!!