2010-09-21 2 views
0

В C# с помощью VS2005, если у меня есть переменная типа Object, к которому я назначить MyObjectType объект литьем следующим образом:C# в VS2005: определение типа объекта действительно

MyObjectType myObj = GetMyObject(); 
Object obj = (Object)myObj; 

Есть ли способ чтобы определить, что obj на самом деле MyObjectType, а не только Object?

ответ

2

Абсолютно:

if (obj is MyObjectType) 
{ 
    ... 
} 

Или, если вы хотите, чтобы затем использовать некоторые члены его:

MyObjectType mot = obj as MyObjectType; 
if (mot != null) 
{ 
    ... 
} 

Обратите внимание, что это будет работать, даже если obj относится к объекту производного из MyObjectType , Если вы хотите только точное совпадение, то следует использовать:

if (obj != null && obj.GetType() == typeof(MyObjectType)) 

... но это довольно редкий случай использования в моем опыте.

+0

@John: но не объект Object, а не объект MyObjectType? –

+1

@Craig: Нет, вам присвоен «MyObjectType», поэтому это «MyObjectType», даже если он хранится в переменной типа «object». – Timwi

+0

@Craig: 'obj' - это переменная, а не объект вообще. * Значение * объекта 'obj' также не является объектом - это ссылка. Это может быть ссылка на экземпляр «Object» или на экземпляр «MyObjectType» или какой-либо другой тип ... или нуль. Обратите внимание, что тип самого объекта никогда не изменяется, даже если вы храните ссылку на него в переменной типа. –

0

Если вы хотите проверить, если OBJ является MuObjectType вы можете написать

if(obj is MyObjectType) 

Это возвращает true если OBJ является Infact MyObjectType, иначе false.

Смежные вопросы