尝试在c#中使用多个选项执行内联if语句

本文关键字:执行 选项 语句 if | 更新日期: 2023-09-27 17:50:43

所以我有两个可为空的小数

s.SwapProfitAmount
s.SwapProfitBps

然后我有一个属性需要被设置为这些小数之一的值Profit

我想要的是一个行if语句,它将Profit设置为HasValueValue大于0的任何一个可空小数的Value。如果它们都是0,它就会设它为0。有意义吗?

编辑:

Profit

string

尝试在c#中使用多个选项执行内联if语句

应该可以。为什么要用一行来写?

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

时,这些都将回落到SwapProfitBps

最后,就像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()