Используя оператор с Дженериками в C#

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

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

Что лучший способ к чему-то вроде этого?

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

21
задан Daniel A. White 19 February 2010 в 20:09
поделиться

6 ответов

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

bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T));
29
ответ дан 29 November 2019 в 20:32
поделиться

следует использовать следующее:

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

is operator

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

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

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

Ссылки

8
ответ дан 29 November 2019 в 20:32
поделиться

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

  class SomeClass<T>
  {
     SomeClass()
     {
        bool IsIComparable = typeof(IComparable).IsAssignableFrom(typeof(T));
     }
  } 
2
ответ дан 29 November 2019 в 20:32
поделиться
bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T))
2
ответ дан 29 November 2019 в 20:32
поделиться

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

Type Ttype = typeof(T);

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

0
ответ дан 29 November 2019 в 20:32
поделиться

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

bool IsInterface = typeof(ISomeInterface).IsAssignableFrom(typeof(T));
1
ответ дан 29 November 2019 в 20:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: