我有一个包含两种类型对象的数组.我需要验证对象类,但是

本文关键字:对象 验证 但是 有一个 包含 两种 类型 数组 | 更新日期: 2023-09-27 17:54:34

我有三个类:实体,学生和教师。所有对象都保存在实体数组中。我需要验证Entity[i]项目的类别,但是当我试图验证时,我收到了一个警告。程序停止了,什么也没发生。该怎么办?

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);

我做错了什么?我怎样才能正确地验证对象类?

我有一个包含两种类型对象的数组.我需要验证对象类,但是

您的问题是您正在使用不同类型的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
}