尝试在c#中使用多个选项执行内联if语句
本文关键字:执行 选项 语句 if | 更新日期: 2023-09-27 17:50:43
所以我有两个可为空的小数
s.SwapProfitAmount
s.SwapProfitBps
然后我有一个属性需要被设置为这些小数之一的值Profit
我想要的是一个行if语句,它将Profit
设置为HasValue
和Value
大于0的任何一个可空小数的Value
。如果它们都是0,它就会设它为0。有意义吗?
Profit
是string
应该可以。为什么要用一行来写?
Profit = (s.SwapProfitAmount.HasValue && s.SwapProfitAmount.Value > 0 ? s.SwapProfitAmount.Value : s.SwapProfitBps.GetValueOrDefault(0)).ToString();
为了便于阅读…
Profit = (
s.SwapProfitAmount.HasValue && s.SwapProfitAmount.Value > 0
? s.SwapProfitAmount.Value
: s.SwapProfitBps.GetValueOrDefault(0)
).ToString();
既然你说你正在使用LINQ,这可能适用于…
var results = from s in somethings
let bps = s.SwapProfitBps.GetValueOrDefault(0)
let amount = s.SwapProfitAmount
let profit = amount.HasValue && amount.Value > 0
? amount.Value
: bps
select profit.ToString();
当SwapProfitAmount <= 0
或== null
最后,就像Andrey说的,你可以使用一个函数…
Profit = GetProfitString(s);
内联if语句非常简单。如果你想嵌套它,最简单的使用方法就是用()
来封装语句。Result = ( (evaluate Truth) ? (return if True) : (return if False));
// the result of nesting inline if statements.
MyValue = ( [statement] ? ( [another Statement] ? true : false) : ([another statement] ? false : ([another stamement] ? true : false)));
然而,可能会变得相当混乱。和实际上相当于输入if语句。
如果它们是可空的。您可以执行以下操作:
Profit = ((s.SwapProfitAmount.getValueOrDefault() > s.SwapProfitBps.getValueOrDefault() && s.SwapProfitAmount.HasValue) ? s.SwapProfitAmount.getValueOrDefault() : s.SwapProfitBps.getValueOrDefault();
c#中三元操作符的格式为:
(condition)
? (value-if-true)
: (value-if-false)
但是,由于您只检查null,因此可以使用coalesce
操作符,其工作方式如下:
(nullableObject1) ?? (nullableObject2)
相当于
(nullableObject1 != null) ? nullableObject1 : (nullableObject2)
您可以将这些操作符串在一起,但是您应该使用括号来帮助使用三元操作符使语句更清楚。两种方法都可以
您可以尝试下面的
Profit = (s.SwapProfitAmount.HasValue && s.SwapProfitAmount.Value > 0) ? s.SwapProfitAmount.Value : (s.SwapProfitBps.HasValue && s.SwapProfitBps.Value > 0) ? s.SwapProfitBps.Value : 0) + "";
试试这个:
Profit = s.SwapProfitAmount.HasValue && s.SwapProfitAmount > 0 ?
s.SwapProfitAmount.Value.ToString() :
s.SwapProfitBps && s.SwapProfitBps > 0 ? s.SwapProfitBps.Value.ToString() : "0";
Math.Max(s.SwapProfitAmount ?? 0, s.SwapProfitBps ?? 0)
问题是你没有提到如果它们都不为空且> 0该怎么办。
如果你想要字符串do:
Math.Max(s.SwapProfitAmount ?? 0, s.SwapProfitBps ?? 0).ToString()