Я бы хотел увидеть конкретный пример того, что вы пытаетесь сделать. Всякий раз, когда вы обнаруживаете, что выполняете различные действия в зависимости от типа объекта, это признак того, что вам нужно пересмотреть свою объектную модель.
Вот действительно надуманный пример:
public void Talk(Animal a)
{
if (a is Dog)
{
Console.WriteLine("Woof!");
}
else if (a is Cat)
{
Console.WriteLine("Meow!");
}
}
Вам гораздо лучше добавить виртуальный метод "Talk" в Animal и переопределить его в Dog и Cat, чтобы ваш метод стал:
public void Talk(Animal a)
{
a.Talk();
}
Можете ли вы провести рефакторинг своего кода таким образом, чтобы универсальному классу не нужно было слишком много знать о его параметризованном типе?