我有三种类型:
病人
住院病人:病人
门诊:患者
我有一个方法可以填充基础患者及其所有属性:PatientRepository.FillPatient()
并返回一个Patient
对象。
然后,我需要检查并查看 Patient
类型是什么,并向下转换为 OutPatient
或 InPatient
。
当我尝试向下转换时,它抛出无法将类型为“Patient”的对象转换为类型为“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 个其他类的基础时,该基类(在您的情况下为 Patient)将是抽象的。
关于c# - 为什么我的 c# 沮丧失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14486759/