Сегодня у меня возникла небольшая проблема, и, к сожалению, я не нашел хорошего решения. Я хотел бы создать метод расширения для некоторого общего интерфейса. Этот метод принимает другой тип родового параметра, как показано нижеКак создать общий метод расширения с дополнительным типом для общего интерфейса
public interface IGenericInterface<TSource>
{
void DoSomething<TDest>();
}
Как вызвать метод DoSomething2
точно таким же образом, как DoSomething
метода (без прохождения первого типа)?
public void DoSomething<TDest>()
//Called like below
testClass.DoSomething<object>();
вместо (как моей текущей подписи)
public static void DoSomething2<TDest, TSource>(this IGenericInterface<TSource> interf)
//called like below
testClass.DoSomething2<string, object>(); // have to repass object type
Я знаю, что компилятор не может автоматически вывести второй тип (link). Но мне любопытно, нашел ли кто-нибудь решение.
В будущем, пожалуйста, включите в свой текст весь соответствующий код (как текст). Скрипки великолепны, но они не заменяют действительный код. Я редактировал часть вашего кода в ваш вопрос. – ryanyuyu
Это невозможно. Теоретически, C# потенциально может вывести первый тип, но он либо вводит все аргументы типа, либо нет, вы не можете иметь частичный вывод. – Kenneth
@ryanyuyu спасибо, я буду помнить об этом. Кеннет, к сожалению, только такая информация приходит ко мне. Мне кажется, что не было бы проблем, если бы компилятор мог вывести второй тип. В этом случае метод расширения трудно понять. –