Используя это, чтобы проверить, является ли c
экземпляром TForm
.
c.GetType().Name.CompareTo("TForm") == 0
Есть ли более безопасный для типов способ сделать это, кроме использования string
в качестве параметра для CompareTo()
?
Используя это, чтобы проверить, является ли c
экземпляром TForm
.
c.GetType().Name.CompareTo("TForm") == 0
Есть ли более безопасный для типов способ сделать это, кроме использования string
в качестве параметра для CompareTo()
?
Различные ответы здесь имеют два разных значения.
Если вы хотите проверить, имеет ли экземпляр точный тип, то
if (c.GetType() == typeof(TForm))
- путь.
Если вы хотите узнать, является ли c
экземпляром TForm
или подкласса, используйте is
/as
:
if (c is TForm)
или
TForm form = c as TForm;
if (form != null)
В вашем уме стоит понять, какое из этих поведений вам действительно нужно.
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
}
Да, ключевое слово "есть":
if (c is TForm)
{
...
}
Подробнее о MSDN: http://msdn.microsoft.com/en-us/library/scekt9xw(VS.80).aspx
Проверяет, совместим ли объект с данным типом. Например, можно определить, совместим ли объект с типом строки следующим образом:
Также несколько в том же духе
Type.IsAssignableFrom(Type c)
"True, если c и текущий тип представляют один и тот же тип, или если текущий тип находится в иерархии наследования c, или если текущий тип является интерфейсом, который реализует c, или если c является параметром универсального типа и текущим типом представляет собой одно из ограничений c. "
Отсюда: http://msdn.microsoft.com/en-us/library/system.type.isassignablefrom.aspx
Немного более компактный, чем другие ответы, если вы хотите использовать c как TForm:
if(c is TForm form){
form.DoStuff();
}
Попробуйте выполнить
if (c is TForm) {
...
}
Как уже упоминалось, ключевое слово "есть". Однако, если вы собираетесь позже применить его к этому типу, например.
TForm t = (TForm)c;
Затем вы должны использовать ключевое слово "как".
например. TForm t = c as TForm.
Затем вы можете проверить
if(t != null)
{
// put TForm specific stuff here
}
Не сочетать, как с, потому что это двойная проверка.
Или
c.getType() == typeOf(TForm)
bool isValid = c.GetType() == typeof(TForm) ? true : false;
или более простой
bool isValid = c.GetType() == typeof(TForm);