如何检查各种“是”;条件和相应的类型
本文关键字:条件 类型 何检查 检查 | 更新日期: 2023-09-27 18:18:04
我有三个班叫做学校,老师和学生。现在让我们假设我有一个名为GetAcademicDetailsOfCity()的方法,它将生成一个School, Teacher和Student中任何类型的对象,或者可能是由三者中的任何一个派生的类。
在运行时,我想检查下面:
var instance = GetAcademicDetailsOfCity();
if (instance is School)
{
//What i actually want is something like
var result = new School();
result.property1 = (School)instance.property1
result.property2 = (School)instance.property2
result.property3 = (School)instance.property3
}
if (instance is Teacher)
{
var result = new Teacher();
result.property1 = (Teacher)instance.property1
result.property2 = (Teacher)instance.property2
result.property3 = (Teacher)instance.property3
}
if (instance is Student)
{
var result = new Student();
result.property1 = (Student)instance.property1
result.property2 = (Student)instance.property2
result.property3 = (Student)instance.property3
}
如何一次性检查以上条件
if (instance is School || instance is Teacher || instance is Student)
{
//What should be the casting of instance below ??
var result = (????)instance;
}
return result;
使用这个结果实例,我将创建一个特定学校城市的学生报告。如果需要更多的细节,请告诉我。我很乐意提供尽可能多的细节:)
如果GetAcademicDetailsOfCity()
返回一个公共基类型(即不仅仅是Object
),让我们称之为MyBaseType
,您可以使用else if
这样来提高效率(因为它只执行一个if
块,而不是像您在问题中那样执行所有三个块):
if (instance is School)
{
var result = (School) instance;
// Do stuff specific to an instance of School
}
else if (instance is Teacher)
{
var result = (Teacher) instance;
// Do stuff specific to an instance of Teacher
}
else if (instance is Student)
{
var result = (Student) instance;
// Do stuff specific to an instance of Student
}
理想情况下,您希望这3个类中的每一个都实现一个公共接口或从提供GetAcademicDetailsOf
函数的基类继承。这样你只需要担心最小的类型转换。
AcademicDetails results = instance.GetAcademicDetails();