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