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/