条件运算符中的条件。

5

如何使用三元运算符来实现这个功能?

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结构的原因? - Ann L.
坚持使用if else结构。可读性很重要。 - Akshay
不要强制使用三元运算符,这很少有好结果。 - Carcigenicate
3个回答

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

但我仍然坚持我的评论:这比if-else难以理解。

或者,可能是这样的:

a = UnitType ?? ElevationType ?? StructureType;

如果你熟悉 ?? 运算符,那么这是相当清晰的。


请问如何评估 ?? 运算符语句? - zaria khan
3
这是翻译的结果:@zariakhan 请看这里——如果您不想阅读,那么在这种情况下,a等于UnitType,除非为null,在这种情况下它取ElevationType的值,除非后者也为null,最后它取StructureType的值。 - Alfie Goodacre
@AlfieGoodacre 很棒。我之前不熟悉这个运算符。感谢你提供如此简单的解释! - zaria khan
谢谢,@AlfieGoodacre。另一种表达方式是:C = A ?? BC = (A != null) ? A : B 或者 if(A!=null) C = A; else C = B; 的简写形式。 - Ann L.
2
@AnnL。这个 a = UnitType ?? ElevationType ?? StructureType; 真的很酷!:D - zaria khan

3
如果您需要使用三元操作符完成此操作,可以按以下方式格式化以获得更好的清晰度。
a = UnitType == null ?
    (ElevationType == null ?
        StructureType
        : ElevationType)
    : UnitType;

你也可以使用空值合并运算符,即??操作符。它的作用是,如果对象不为null,则返回该对象,否则返回另一个值。
a = UnitType == null ?
    (ElevationType ?? StructureType)
    : UnitType;

1

只需编写单独的方法,不要使用嵌套的运算符,因为这对所有人来说都很痛苦(难以阅读,容易出错)。如果明天你的类型扩展了两个以上的类型,你的三元运算符将变成地狱。

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

    if(ElevationType != null)
       return ElevationType;

    if(StructureType != null)
       return StructureType

    return null;

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接