Короткий ответ: метод расширения - это просто открытый статический метод, к которому можно обращаться, как к методу экземпляра первого параметра (благодаря ключевому слову this
). Это означает, что вы можете использовать те же параметры, что и в любом статическом методе.
Но если вы хотите, чтобы параметры на самом деле были общими, вам нужно изменить свой метод на следующий:
public static IEnumerable<TElement> GetSequenceDescendants<TElement, TName>(this IEnumerable<TElement> elements, List<TName> names)
{
//do something
}
Вы должны указать все общие аргументы в определении вашего метода.
Кроме того, вы не можете использовать ключевое слово params
ни с чем, кроме массива, т. Е. С params TName[]
все в порядке, но с params List<TName>
нет.