Нет, это возможно, но вы должны дать компилятору некоторый приемлемый контекст того, что такое "TC". Этот третий параметр, TC, больше нигде не используется в вашем коде, поэтому он может быть чем угодно, поэтому компилятор жалуется. Однако, если вы добавляете входящий параметр в свой метод расширения типа TC, вы можете выполнить ситуацию, когда компилятор может определить фактический тип TC, и тогда вам даже не нужно будет указывать, что это за типы при вызове метод:
class Program
{
static void Main(string[] args)
{
var a = new A<B, B>();
string tc = "Hi!";
a.DoIt(tc);
}
}
static class Ext
{
public static A<TA, TB> DoIt<TA, TB, TC>(this A<TA, TB> a, TC c)
{
return a;
}
}
class A<TA, TB> { }
class B { }
Но вы должны дать компилятору некоторый контекст.
Это, как говорится, определение общих параметров является попыткой "все или ничего". Либо компилятор может определить типы каждого параметра универсального типа, либо он не может этого сделать, и вы должны сообщить ему, что это за все.