Другие ответы здесь верны, но вам, вероятно, следует сделать шаг назад и посмотреть, почему вы это делаете.Весь смысл дженериков в том, что они должны быть родовыми.Если вы делаете разные вещи, основанные на типе, то, возможно, универсальный метод не подходит - возможно, вам подходят перегруженные методы.
Или, возможно, типы, которые вы хотите принять, могут реализоватьтот же интерфейс, и вы можете делать вызовы на них на основе интерфейса, а не проверять тип вручную.Например:
interface IDoesSomething
{
void DoSomething();
}
void MyMethod<T>(IEnumerable<T> objects)
where T : IDoesSomething
{
foreach (T t in objects)
{
t.DoSomething();
}
}