больше не должен быть применимым членом функции для вызова. Очевидно, что то, что я только что сказал, неверно, но ваш ответ, похоже, не решает эту проблему (так, как я понимаю).

ющий вызов перегруженEnumerable.Select метод:

var itemOnlyOneTuples = "test".Select<char, Tuple<char>>(Tuple.Create);

терпит неудачу с ошибкой неоднозначности (пространства имен удалены для ясности):

The call is ambiguous between the following methods or properties: 
'Enumerable.Select<char,Tuple<char>>
           (IEnumerable<char>,Func<char,Tuple<char>>)'
and 
'Enumerable.Select<char,Tuple<char>>
          (IEnumerable<char>, Func<char,int,Tuple<char>>)'

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

Мне кажется достаточно ясным, что намерение состоит в том, чтобы вызвать первую перегрузку, а аргумент метода-группы разрешается вTuple.Create<char>(char), Вторая перегрузка не должна применяться, потому что ни один изTuple.Create перегрузки могут быть преобразованы в ожидаемыеFunc<char,int,Tuple<char>> тип. яугадывание компилятор смущенTuple.Create<char, int>(char, int), но возвращаемый тип неверен: он возвращает двойной кортеж и поэтому не может быть преобразован в соответствующийFunc тип.

Кстати, любое из следующего делает компилятор счастливым:

Указание аргумента типа для аргумента группы методов:Tuple.Create<char> (Возможно, это на самом деле проблема вывода типа?).Делаем аргумент лямбда-выражением вместо группы методов:x => Tuple.Create(x), (Хорошо играет с выводом типа наSelect вызов).

Неудивительно, что пытаясь вызвать другую перегрузкуSelect таким образом также не удается:

var itemIndexTwoTuples = "test".Select<char, Tuple<char, int>>(Tuple.Create);

В чем здесь проблема?

Ответы на вопрос(2)

Ваш ответ на вопрос