2015-06-09 4 views
-2

У меня есть три класса: сущность, ученик и учитель. Все объекты сохраняются в массиве Entity. Мне нужно проверить класс Entity[i], но когда я пытаюсь virify, я получаю предупреждение. Программа остановлена ​​и ничего не происходит. Что делать?У меня есть массив с двумя типами объектов. Мне нужно проверить класс объекта, но

class Entity { 
    string param0; 
} 

class Student : Entity { 
    string param1; 
    //consturctor... 
} 

class Teacher : Entity { 
    class string param2; 
    //consturctor... 
} 

Entity[] entities = new Entity[5]; 
entities[0] = new Student("some string1"); 
entities[1] = new Teacher("some string2"); 
... 
... 
var es = entities[i] as Student; 
if (es.param1 != null) //here throw nullReferenceException 
    Debug.Log(es.param1); 
else 
    Debug.log(es.param2); 

Что я могу сделать? Как я могу проверить класс объекта правильно?

+1

Но 'i' никогда не определяется ... Пожалуйста, укажите * минимальный рабочий пример * (что-то, что скомпилируется). –

+0

«Оператор as как операция литья. Однако, если преобразование невозможно, так как возвращает значение null вместо создания исключения» - https://msdn.microsoft.com/en-us/library/cscsdfbt.aspx – vesan

+0

'es.param1' должно быть' es' в выражении if – SimpleVar

ответ

4

Ваш вопрос, что вы настраиваете ваш массив с различными типами Entity:

Entity[] entities = new Entity[5]; 
entities[0] = new Student("some string1"); 
entities[1] = new Teacher("some string2"); 

При попытке бросить объект в положении 1 (то есть второй элемент в массиве) в качестве Student, результат будет null, поскольку объект является Teacher:

var es = entities[i] as Student; 

es равна нулю в этой точке.

Вместо этого проверьте тип, а затем получите доступ к определенному параметру, как только вы узнаете, какой тип сущности у вас есть. Один из способов сделать это будет:

if (es is Student) 
{ 
    Debug.Log((es as Student).param1); 
} 
else if (es is Teacher) 
{ 
    Debug.log((es as Teacher).param2); 
} 
else 
{ 
    //some other entity 
} 
Смежные вопросы