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

C#中嵌套三元转if-else出现不可达代码问题求助

用if-else替代对象初始化器中的嵌套三元表达式(解决不可达代码问题)

你遇到的问题核心是:对象初始化器的语法只支持属性赋值表达式,不能直接嵌入if-else执行语句,强行写入会导致语法错误或不可达代码提示。下面提供两种标准写法:

方法一:先计算属性值,再传入初始化器

先通过if-else算出NoOfWell的值,再把结果放到对象初始化器中赋值,逻辑清晰且符合语法要求:

public BrainSubseaJumperInputDTO FillInputDTO(ProjectInfoDTO projectInfoInput = null, BrainConceptsInputDTO conceptInput = null)
{
    var sumOfAllWells = conceptInput?.ConceptDCDetailsInputDTO
        .Sum(x => x.OilProducerWell + x.GasProducerWell + x.WaterInjectorWell + x.GasInjectorWell) ?? 0;
    
    // 提前用if-else计算NoOfWell的值
    int noOfWell;
    if (_brainConceptDCDetailsInput.HydrocacbornType == "Gas")
    {
        noOfWell = _brainConceptDCDetailsInput.GasFlowlineSize;
    }
    else if (_brainConceptDCDetailsInput.HydrocacbornType == "Oil")
    {
        noOfWell = _brainConceptDCDetailsInput.OilFlowlineSize;
    }
    else
    {
        noOfWell = 0;
    }
    
    return new BrainSubseaJumperInputDTO()
    {
        FlowLineSize = sumOfAllWells,
        NoOfWell = noOfWell
    };
}

方法二:先创建对象实例,再用if-else赋值

先初始化对象的已知属性,再通过if-else给NoOfWell单独赋值,这种写法更灵活,适合属性较多或逻辑复杂的场景:

public BrainSubseaJumperInputDTO FillInputDTO(ProjectInfoDTO projectInfoInput = null, BrainConceptsInputDTO conceptInput = null)
{
    var sumOfAllWells = conceptInput?.ConceptDCDetailsInputDTO
        .Sum(x => x.OilProducerWell + x.GasProducerWell + x.WaterInjectorWell + x.GasInjectorWell) ?? 0;
    
    // 先创建对象并初始化FlowLineSize
    var inputDto = new BrainSubseaJumperInputDTO
    {
        FlowLineSize = sumOfAllWells
    };
    
    // 用if-else给NoOfWell赋值
    if (_brainConceptDCDetailsInput.HydrocacbornType == "Gas")
    {
        inputDto.NoOfWell = _brainConceptDCDetailsInput.GasFlowlineSize;
    }
    else if (_brainConceptDCDetailsInput.HydrocacbornType == "Oil")
    {
        inputDto.NoOfWell = _brainConceptDCDetailsInput.OilFlowlineSize;
    }
    else
    {
        inputDto.NoOfWell = 0;
    }
    
    return inputDto;
}

额外推荐:用switch表达式简化判断(C# 8.0+)

如果你的项目使用C# 8.0及以上版本,可以用switch表达式替代嵌套三元和if-else,语法更简洁易读:

public BrainSubseaJumperInputDTO FillInputDTO(ProjectInfoDTO projectInfoInput = null, BrainConceptsInputDTO conceptInput = null)
{
    var sumOfAllWells = conceptInput?.ConceptDCDetailsInputDTO
        .Sum(x => x.OilProducerWell + x.GasProducerWell + x.WaterInjectorWell + x.GasInjectorWell) ?? 0;
    
    var noOfWell = _brainConceptDCDetailsInput.HydrocacbornType switch
    {
        "Gas" => _brainConceptDCDetailsInput.GasFlowlineSize,
        "Oil" => _brainConceptDCDetailsInput.OilFlowlineSize,
        _ => 0
    };
    
    return new BrainSubseaJumperInputDTO
    {
        FlowLineSize = sumOfAllWells,
        NoOfWell = noOfWell
    };
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:01:45