Это чисто эстетическая вещь, но я думаю, что все же стоит спросить. В следующем коде:
interface IGiveResult<TResult>
{
TResult GetResult();
}
static class ResultGetter
{
GetResultFrom<TResultGiver, TResult>(TResultGiver giver) where TResultGiver : IGiveResult<TResult>
{
return giver.GetResult();
}
}
Чтобы вызвать GetResultFrom
, мне нужно указать оба параметра типа следующим образом:
ResultGetter.GetResultFrom<SomeGiverType, SomeResultType>(someGiverInstance);
Тем не менее, я хотел бы назвать это так:
ResultGetter.GetResultFrom<SomeGiverType>(someGiverInstance);
В конце концов, у компилятора есть вся информация, необходимая для вывода второго универсального типа. Однако это не компилируется. Можно ли изменить этот код, чтобы не указывать тип результата?
ResultGetter<SomeGiverType>.GetResultFrom(someGiverInstance)
, но я не думаю, что это поможет в этом случае. Однако я не совсем уверен, и у нас нет полного примера для работы (чтобы было легко проверить). - person Jon Skeet   schedule 26.07.2021TResultGiver
кажется излишним, поскольку вам не нужно знать точный типTResultGiver
для вызова GetResult и возврата TResult.GetResultFrom<TResult>(IGiveResult<TResult> giver)
кажется адекватной подписью, и тогда ее можно легко вывести. На самом деле весь статический класс кажется избыточной оболочкой, поскольку вы можете вызвать GetResult прямо изgiver
. Но, скорее всего, это связано с демонстрацией, а не с реальным кодом. - person lidqy   schedule 26.07.2021