Я очень смущен этим, поэтому, если у кого-то есть идеи. У меня есть общий метод
public void Foo<TClass>(TClass item) where TClass : class
{ }
И я хочу вызвать этот метод из другого универсального метода, но этот общий метод не имеет ограничения типа "где TClass: class"
public void Bar<T>(T item)
{
this.Foo<T>(item);
}
Это не работает, я получаю сообщение об ошибке
"Тип" T "должен быть ссылочным типом, чтобы использовать его как параметр" TClass ""
Что я понимаю. Но мой вопрос заключается в следующем: есть ли что-нибудь, что я могу сделать с синтаксисом С#, чтобы "фильтровать" общий тип "T", чтобы передать его в "this.Bar", если это класс. Что-то вроде....
public void Bar<T>(T item)
{
if (typeof(T).IsClass)
this.Foo<T **as class**>();
}
Я понимаю, что могу использовать отражение, чтобы вызвать Foo, но это просто похоже на обман. Есть ли что-то, что я могу сделать с С# для передачи "T" с ограничением во время выполнения?
Кроме того - я не могу изменить ограничение на метод "Бар", поскольку он исходит из интерфейса, поэтому ограничение должно соответствовать ограничению на интерфейсе