【问题标题】:Condition in Conditional (Ternary) Operator条件(三元)运算符中的条件
【发布时间】:2023-04-11 04:04:01
【问题描述】:

如何使用三元运算符实现这一点?

if(UnitType == null)
{
    a = ElevationType
}
else
{
    a = UnitType
}

三元运算符

a = UnitType == null ? ElevationType : UnitType;

现在我想要这样的东西

if(UnitType == null)
{
   if(ElevationType == null)
   {
    a = StructureType
   }
   else{
    a = ElevationType
   }
}
else
{
    a = UnitType
}

我可以使用三元运算符来实现吗?如果没有,应该怎么做?

【问题讨论】:

  • 你可以实现它,但它会有点难以阅读。 if-else 结构不可接受有什么原因吗?
  • 坚持 if else 结构。可读性很重要。
  • 不要强制使用三元。这很少能奏效。

标签: c# if-statement conditional ternary-operator


【解决方案1】:

只需编写单独的方法,不要使用嵌套的? 运算符,因为这对每个人来说都很痛苦(不可读,提示错误)。如果明天你的类型又扩展了 2 个类型,你的三元运算符就会变成地狱。

public TypeOfA GetTypeOfAMethod()
{
    if(UnitType != null)
       return UnitType;

    if(ElevationType != null)
       return ElevationType;

    if(StructureType != null)
       return StructureType

    return null;

}

【讨论】:

    【解决方案2】:

    如果您需要使用三元运算符执行此操作,您可以像这样格式化它以获得更好的清晰度

    a = UnitType == null ?
        (ElevationType == null ?
            StructureType
            : ElevationType)
        : UnitType;
    

    你也可以空合并,这是??操作符,这表示如果对象不为空,则返回它,如果它是返回这个。

    a = UnitType == null ?
        (ElevationType ?? StructureType)
        : UnitType;
    

    【讨论】:

      【解决方案3】:
      a = (UnitType == null) ? (ElevationType ?? StructureType) : UnitType;
      

      但我坚持我的意见:这比 if-else 更难理解。

      或者,可能,

      a = UnitType ?? ElevationType ?? StructureType;
      

      如果您熟悉 ?? 运算符,那就相当清楚了。

      【讨论】:

      • 您能告诉我们如何评估?? 运算符语句吗?
      • @zariakhan Here you go - 或者如果您不想阅读它,在这种情况下,a 等于 UnitType,除非它为 null,在这种情况下它采用 @ 的值987654327@ 除非它也为 null,在这种情况下,它最终采用 StructureType 的值
      • @AlfieGoodacre 酷。对这个运营商不熟悉。谢谢你这么简单的解释!
      • 谢谢,@AlfieGoodacre。另一种说法是:C = A ?? BC = (A != null) ? A : B的快捷方式,或者if(A!=null) C = A; else C = B;
      • @AnnL。这个a = UnitType ?? ElevationType ?? StructureType; 超级酷! :D
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-14
      • 2012-02-22
      • 2013-04-26
      • 2013-06-06
      • 2013-01-14
      • 2014-10-19
      • 2010-10-20
      相关资源
      最近更新 更多