簡體   English   中英

為什么在 C# 中檢測到無法訪問的代碼 - 將三元運算嵌套到 if-else 語句中

[英]Why is there Unreachable code detected in C# - Nested ternary operation into if-else statement

在此之前,我是c#的初學者。我將嵌套三元運算改成獨立語句,但是當我將它改成if-else語句時,它說它是無法訪問的代碼

這是我遇到問題的行

FlowLineSize = sumOfAllWells,
NoOfWell = _brainConceptDCDetailsInput.HydrocacbornType == "Gas"
    ? _brainConceptDCDetailsInput.GasFlowlineSize
    : _brainConceptDCDetailsInput.HydrocacbornType == "Oil"
        ? _brainConceptDCDetailsInput.OilFlowlineSize
        : 0

sumOfAllWells,之后放置 if else 語句的語法格式是什么,我已經嘗試在它之后放置 if 語句並且它說無法訪問代碼

編輯:

這是完整的代碼,

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

如果這是有效代碼: 編輯后,它更有意義......

FlowLineSize = sumOfAllWells, // <== Typo here? No, it's part of something bigger
NoOfWell = _brainConceptDCDetailsInput.HydrocacbornType == "Gas" ?
                            _brainConceptDCDetailsInput.GasFlowlineSize :
                            _brainConceptDCDetailsInput.HydrocacbornType == "Oil" ? 
                                 _brainConceptDCDetailsInput.OilFlowlineSize 
                                 :0

那么三元可憎性將大致轉化為

if( _brainConceptDCDetailsInput.HydrocacbornType == "Gas")
{
    NoOfWell = _brainConceptDCDetailsInput.GasFlowlineSize;
}
else
{
    if(_brainConceptDCDetailsInput.HydrocacbornType == "Oil")
    { 
        NoOfWell = _brainConceptDCDetailsInput.OilFlowlineSize;
    }
    else
    {
        NoOfWell = 0;
    }
}

假設有一個NoOfWell聲明。

但正如評論中指出的那樣:有更好的(即更清晰、更易讀)的方式來表達這一點。

例如 switch 表達式:

NoOfWell = _brainConceptDCDetailsInput.HydrocarbonType switch 
{ 
    "Gas" => _brainConceptDCDetailsInput.GasFlowlineSize, 
    "Oil" => _brainConceptDCDetailsInput.OilFlowlineSize, 
    _ => 0 
}

如果您可以將HydroCarbonType class,那么這可能是它的一個屬性。

如果您可以將其設為枚舉,則可以使用 Dictionary 和 ExtentionMethods ...


看到完整的代碼后,您還可以將邏輯部分作為 DTO 構建器/工廠的一部分……

static BrainSubseaJumperInputDTO FromBrainConceptDetailsInput( 
                                     int sum, 
                                     WhateverTypeThatIs input )
{
    return new BrainSubseaJumperInputDTO(){
        FlowLineSize = sum,
        NoOfWell = input.HydrocarbonType switch 
                   { 
                       "Gas" => input.GasFlowlineSize, 
                       "Oil" => input.OilFlowlineSize, 
                       _ => 0 
                   }
    };
}

這會將您的代碼歸結為

public BrainSubseaJumperInputDTO FillInputDTO(ProjectInfoDTO projectInfoInput = null, BrainConceptsInputDTO conceptInput = null)
{
    var sumOfAllWells = conceptInput?.ConceptDCDetailsInputDTO
                                     .Sum(x => x.OilProducerWell + 
                                               x.GasProducerWell + 
                                               x.WaterInjectorWell + 
                                               x.GasInjectorWell) 
                                     ?? 0;
    return FromBrainConceptDetailsInput( sumOfAllWells, 
                                         _brainConceptDCDetailsInput);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM