Расширение LINQ SelectMany в 3,5 по сравнению с 4,0?

Когда я видел предложение 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, которые были расширены (хм) или новые правила для синтаксиса лямбды или?

8
задан Community 23 May 2017 в 10:29
поделиться

1 ответ

Похоже, что в новой версии 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\!!!
7
ответ дан 5 December 2019 в 21:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: