Возможный дубликат:
Почему Func неоднозначен с Func?
Я заметил очень странную проблему разрешения перегрузки с дженериками...
Рассмотрите следующие методы:
Код: Выделить всё
static void Foo(TSource element, Func selector)
{
"int".Dump();
}
static void Foo(TSource element, Func selector)
{
"double".Dump();
}
static T Identity(T value)
{
return value;
}
Если я попытаюсь вызвать Foo с помощью лямбда-выражение в качестве селектора, все работает нормально:
Код: Выделить всё
Foo(42, x => x); // prints "int"
Код: Выделить всё
Foo(42, Identity);
// The call is ambiguous between the following methods or properties:
// 'UserQuery.Foo(int, System.Func)' and
// 'UserQuery.Foo(int, System.Func)'
И становится еще хуже! Даже если я укажу все параметры типа явно, я все равно получаю ту же ошибку:
Код: Выделить всё
Foo(42, Identity); // The call is ambiguous...
Обратите внимание, что это работает, если я явно создаю делегата:
Код: Выделить всё
Foo(42, new Func(Identity)); // prints "int"
Подробнее здесь: https://stackoverflow.com/questions/459 ... tter-title
Мобильная версия