c# - 为什么我的 c# 沮丧失败?

标签 c#

我有三种类型:

  1. 病人
  2. 住院病人:病人
  3. 门诊:患者

我有一个方法可以填充基础患者及其所有属性:PatientRepository.FillPatient() 并返回一个Patient 对象。

然后,我需要检查并查看 Patient 类型是什么,并向下转换为 OutPatientInPatient

当我尝试向下转换时,它抛出无法将类型为“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/

相关文章:

c# - LINQ 查询从另一个表获取数据

c# - 如何在 .NET/C# 中的 Debug模式下的 Debug.WriteLine() 和 Release模式下的 Console.WriteLine() 之间切换

c# - 这种类型推断的优势是什么?

c# - 使用集合时如何实现线程安全的缓存机制?

c# - 尽管连接字符串超时 3 秒,但 SQL 连接等待 15 秒

c# - 使用所有单元格格式将 dataGridView 导出到 Excel

c# - 如何处理 TPL 中的任务取消

c# - 使用 linq 提供按日期存在的用户总数

c# - 对实现 IEnumerator 的类进行序列化

c# - 防止 Windows 窗体 datagridview 在单元格编辑后更改行