You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Fire.ly .NET SDK推断FHIR 'choice'属性的正确数据类型

读取Firely .NET SDK中FHIR Choice属性的正确方式

你的初始代码是可行的,但可以通过更严谨的方式处理,同时避免空引用风险:

  • 基础判断逻辑
    当FHIR数据中未设置Deceased字段时,patient.Deceased会是null,用as转换后的变量也会是null,不会抛出异常。建议先通过SDK提供的HasXXX()方法判断属性是否存在,再做类型转换:

    if (patient.HasDeceased())
    {
        var deceasedDateTime = patient.Deceased as FhirDateTime;
        if (deceasedDateTime != null)
        {
            // 处理逝者日期逻辑,例如获取日期值
            var deathDate = deceasedDateTime.Value;
        }
    
        var deceasedBool = patient.Deceased as FhirBoolean;
        if (deceasedBool != null)
        {
            // 处理逝者布尔值逻辑,例如获取是否已故的标识
            var isDeceased = deceasedBool.Value;
        }
    }
    
  • 更优雅的模式匹配(C# 7.0+)
    利用C#的模式匹配可以让类型判断和逻辑处理更集中,代码可读性更高:

    if (patient.Deceased is var deceasedValue && deceasedValue != null)
    {
        switch (deceasedValue)
        {
            case FhirDateTime dt:
                var deathDate = dt.Value;
                // 执行日期类型的下游处理逻辑
                break;
            case FhirBoolean b:
                var isDeceased = b.Value;
                // 执行布尔类型的下游处理逻辑
                break;
            default:
                // 处理未预期的类型(如果有扩展类型的需求)
                break;
        }
    }
    

关键说明:

  • Firely SDK生成的POCO类中,每个Choice属性都会配套生成HasXXX()方法(如HasDeceased()),用于快速判断该属性是否已被赋值,比直接判断null更直观。
  • 无论哪种方式,当属性未设置时,patient.Deceased为null,不会触发类型转换后的逻辑分支,无需额外处理空指针异常。

内容的提问来源于stack exchange,提问作者Jaffacakes82

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 10:15:39