У меня есть два метода расширения на 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
, не было бы разрешения перегрузки, и он мог бы вывести параметр типа из сигнатуры метода.
На самом деле запутанная часть заключается в том, как она работает при передаче blah
.