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

Проверьте, имеет ли экземпляр тип

Используя это, чтобы проверить, является ли c экземпляром TForm.

c.GetType().Name.CompareTo("TForm") == 0

Есть ли более безопасный для типов способ сделать это, кроме использования string в качестве параметра для CompareTo()?

4b9b3361

Ответ 1

Различные ответы здесь имеют два разных значения.

Если вы хотите проверить, имеет ли экземпляр точный тип, то

if (c.GetType() == typeof(TForm))

- путь.

Если вы хотите узнать, является ли c экземпляром TForm или подкласса, используйте is/as:

if (c is TForm)

или

TForm form = c as TForm;
if (form != null)

В вашем уме стоит понять, какое из этих поведений вам действительно нужно.

Ответ 2

if(c is TFrom)
{
   // Do Stuff
}

или если вы планируете использовать c в качестве TForm, используйте следующий пример:

var tForm = c as TForm;
if(tForm != null)
{
   // c is of type TForm
}

Во втором примере нужно только проверить, имеет ли c тип TForm один раз. Где, если вы проверите, если посмотрите, имеет ли c тип TForm затем TForm его, CLR подвергнется дополнительной проверке. Вот ссылка.

Редактировать: Украдено у Джона Скита

Если вы хотите убедиться в том, что c относится к TForm а не к какому-либо классу, унаследованному от TForm, используйте

if(c.GetType() == typeof(TForm))
{
   // Do stuff cause c is of type TForm and nothing else
}

Ответ 3

Да, ключевое слово "есть":

if (c is TForm)
{
    ...
}

Подробнее о MSDN: http://msdn.microsoft.com/en-us/library/scekt9xw(VS.80).aspx

Проверяет, совместим ли объект с данным типом. Например, можно определить, совместим ли объект с типом строки следующим образом:

Ответ 4

Также несколько в том же духе

Type.IsAssignableFrom(Type c)

"True, если c и текущий тип представляют один и тот же тип, или если текущий тип находится в иерархии наследования c, или если текущий тип является интерфейсом, который реализует c, или если c является параметром универсального типа и текущим типом представляет собой одно из ограничений c. "

Отсюда: http://msdn.microsoft.com/en-us/library/system.type.isassignablefrom.aspx

Ответ 5

Немного более компактный, чем другие ответы, если вы хотите использовать c как TForm:

if(c is TForm form){
    form.DoStuff();
}

Ответ 6

Попробуйте выполнить

if (c is TForm) { 
 ...
}

Ответ 7

Как уже упоминалось, ключевое слово "есть". Однако, если вы собираетесь позже применить его к этому типу, например.

TForm t = (TForm)c;

Затем вы должны использовать ключевое слово "как".

например. TForm t = c as TForm.

Затем вы можете проверить

if(t != null)
{
 // put TForm specific stuff here
}

Не сочетать, как с, потому что это двойная проверка.

Ответ 8

Или

c.getType() == typeOf(TForm)

Ответ 9

bool isValid = c.GetType() == typeof(TForm) ? true : false;

или более простой

bool isValid = c.GetType() == typeof(TForm);