![](/img/trans.png)
[英]C# - Rewrite If-Else statement with similar code to ternary condition
[英]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.