我有三种类型:Patient
Inpatient : Patient
Outpatient : Patient
我有一个填充基本患者及其所有属性的方法:PatientRepository.FillPatient()
并返回一个Patient
对象。
然后,我需要检查一下Patient
类型是什么,并向下转换为Outpatient
或Inpatient
。
当我尝试向下转换时,抛出Unable to cast object of type 'Patient' to type 'Inpatient'.
这是运行时错误。
if (patient.Type == PatientType.Inpatient)
{
var inpatient = (Inpatient)patient;
return inpatient;
}
public enum PatientType
{
Inpatient, Outpatient
}
我不知道为什么。我在这里从根本上做错了吗?
最佳答案
您的FillPatient应该以正确的方式返回特定的类:
public static Patient FillPatient()
{
if (something) {
return new InPatient();
}
else {
return new OutPatient();
}
}
然后您可以将其下放到特定班级
Patient patient = PaitentRepository.FillPatient();
if (patient is InPatient) {
...
}
else {
...
}
注意:大多数情况下,一个类是其他N个类的基类时,该基类(您所用的患者)将是抽象的。