Преобразование группы методов расширения в делегат с универсальным типом

У меня есть два метода расширения в IDataReader со следующими сигнатурами:

internal static List<T> GetList<T>(this IDataReader reader, Func<string, T> del)

internal static double? GetDoubleOrNull(this IDataReader reader, string columnName)

GetDoubleOrNull не имеет перегрузок.

В другом месте я могу сделать

Func<string, double?> del = reader.GetDoubleOrNull;

var x = reader.GetList(del);

или

var x = reader.GetList<double?>(reader.GetDoubleOrNull);

или просто передать метод экземпляра, например

public double? blah(string s)

var x = reader.GetList(blah);

но не могу

var x = reader.GetList(reader.GetDoubleOrNull);

Компилятор выдает ошибку

cannot convert from 'method group' to 'System.Func<string,double?>'

Я не понимаю это. Я думал, что поскольку для GetDoubleOrNull нет перегрузки, не будет и разрешения перегрузки, и он сможет вывести параметр типа из сигнатуры метода.

Сложнее всего то, как это работает при передаче бла.

13
задан Moss 8 March 2012 в 10:50
поделиться