Подтвердить что ты не робот

Почему общий вывод типа не работает в этом случае?

При попытке скомпилировать следующий код в LINQPad:

void Main()
{
    DriveInfo.GetDrives().Select(GetProviderName).Dump();
}

static string GetProviderName(DriveInfo drive)
{
    // some irrelevant WMI code...
}

Я получаю следующую ошибку:

Аргументы типа для метода 'System.Linq.Enumerable.Select(System.Collections.Generic.IEnumerable, System.Func)' не могут быть выведены из использования. Попробуйте явно указать аргументы типа.

Если я использую лямбда как d => GetProviderName(d) вместо группы методов, он отлично работает... Я очень удивлен, потому что я был уверен, что компилятор сможет вывести тип из группы методов. В области не существует другого метода GetProviderName, и типы ввода и вывода четко определены, поэтому он должен быть неявно конвертируемым в Func<DriveInfo, string>... не так ли?

4b9b3361

Ответ 1

Это ограничение в компиляторе, которое было исправлено в С# 4.0