Ответ 1
Я не думаю, что для этого можно использовать оператор is
. Но вы можете использовать IsAssignableFrom:
bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T));
Я хочу сделать что-то вроде этого
class SomeClass<T>
{
SomeClass()
{
bool IsInterface = T is ISomeInterface;
}
}
Каков наилучший способ сделать что-то подобное?
Примечание. Я не хочу сдерживать T
с помощью where
, но я бы хотел, чтобы мой код знал о том, какие типы интерфейсов T
реализует. Я бы предпочел, чтобы мне не приходилось строить T
.
Я не думаю, что для этого можно использовать оператор is
. Но вы можете использовать IsAssignableFrom:
bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T));
следует использовать вместо этого
bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T));
- оператор
Оператор is
используется для проверки того, является ли run-time type
объекта
compatible
с заданным type
.
Выражение, в котором использование is
соответствует синтаксису, оценивается как true, если выполняются оба следующих условия:
Ссылки
Вы можете использовать IsAssignableFrom:
class SomeClass<T>
{
SomeClass()
{
bool IsIComparable = typeof(IComparable).IsAssignableFrom(typeof(T));
}
}
bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T))
Я считаю, что вы можете это сделать лучше всего:
bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T));
Вы можете попробовать сделать что-то вроде
Type Ttype = typeof(T);
Это даст вам полную силу класса Type, который имеет такие функции, как "FindInterfaces".