Подтвердить что ты не робот

Использование оператора `is` с Generics в С#

Я хочу сделать что-то вроде этого

class SomeClass<T>
{
   SomeClass()
   {
        bool IsInterface = T is ISomeInterface;
   }
}

Каков наилучший способ сделать что-то подобное?

Примечание. Я не хочу сдерживать T с помощью where, но я бы хотел, чтобы мой код знал о том, какие типы интерфейсов T реализует. Я бы предпочел, чтобы мне не приходилось строить T.

4b9b3361

Ответ 1

Я не думаю, что для этого можно использовать оператор is. Но вы можете использовать IsAssignableFrom:

bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T));

Ответ 2

следует использовать вместо этого

 bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T));

- оператор

Оператор

is используется для проверки того, является ли run-time type объекта compatible с заданным type.

Выражение, в котором использование is соответствует синтаксису, оценивается как true, если выполняются оба следующих условия:

  • выражение не равно нулю.
  • выражение может быть применено к типу. Что является, литое выражение вида (тип) (выражение) завершается не выбрасывая исключение. Для больше информации, см. 7.6.6 Вставить выражения.

Ссылки

Ответ 3

Вы можете использовать IsAssignableFrom:

  class SomeClass<T>
  {
     SomeClass()
     {
        bool IsIComparable = typeof(IComparable).IsAssignableFrom(typeof(T));
     }
  } 

Ответ 4

bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T))

Ответ 5

Я считаю, что вы можете это сделать лучше всего:

bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T));

Ответ 6

Вы можете попробовать сделать что-то вроде

Type Ttype = typeof(T);

Это даст вам полную силу класса Type, который имеет такие функции, как "FindInterfaces".