c# - 条件运算符?

标签 c# .net ternary-operator conditional-operator

var discount = (i == 1) ? definition.SecondPetDiscount ?? definition.AdditionalPetDiscount :
               (i == 2) ? definition.ThirdPetDiscount ?? definition.AdditionalPetDiscount :
               definition.AdditionalPetDiscount;

有人能给我解释一下这段代码吗?我知道三元运算符。但是上面不是这样的。

普通的三元运算符是这样的:

PaidDate = ( paidDate == null ? DateTime.Now : paidDate);

最佳答案

?: 是三元运算符。 ?? 是空合并运算符。用于返回第一个不为空的表达式。

您发布的代码段同时使用了这两个运算符。它等效于以下 if/else 结构:

if (i == 1)
{
    if (definition.SecondPetDiscount != null)
    {
        discount = definition.SecondPetDiscount;
    }
    else
    {
        discount = definition.AdditionalPetDiscount;
    }
}
else if (i == 2)
{
    if (definition.ThirdPetDiscount != null)
    {
        discount = definition.ThirdPetDiscount;
    }
    else
    {
        discount = definition.AdditionalPetDiscount;
    }
}
else
{
    discount = definition.AdditionalPetDiscount;
}

在该片段中,他们将多个三元运算链接在一起。有时将多个空合并操作链接在一起也很有用,例如var foo = a ?? ?? C

关于c# - 条件运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15749416/

相关文章:

c# - 将二进制数据加载到结构中

java - 在单行中分配和执行 if/else 条件

c# - WPF。如何获取 TextBlock 的 DrawingContext?

javascript - 通用应用程序 : call c# method from javascript

C#:String.Format 是否调用输入的 ToString?

.net - Migrator.Net - 从现有数据库创建

c# - Linq 选择最新的组层次结构

c# - .Net 观察者模式改变。这些是什么时候发生的,为什么?

javascript - 简短的if else javascript

javascript - 传递给函数: incremented integer inside array or set reset array with ternary operator or a custom function