首页 > 解决方案 > 将 if/else 语句转换为 ?: operator C#

问题描述

我想将我的代码简化为更好的东西。这就是为什么我试图将 if/else 语句转换为运算符?:

我的实际代码如下所示:

if (resultat.CodeAlgo != null)
 {
    worksheet.Cells[ligne, 7].Value = resultat.CodeAlgo.ToString();
 }
else
 {
    worksheet.Cells[ligne, 7].Value = string.Empty;
}

我试图转换为:

resultat.CodeAlgo != null
  ? worksheet.Cells[ligne, 7].Value = resultat.CodeAlgo.ToString()
  : worksheet.Cells[ligne, 7].Value = string.Empty;

但它说:

只有赋值、调用、递增、递减和新对象语句可以用作语句。

我第一次使用这个运算符,我不明白为什么我的简化是错误的?

标签: c#if-statement

解决方案


您需要分配三元运算的结果

worksheet.Cells[ligne, 7].Value = resultat.CodeAlgo != null
                ?  resultat.CodeAlgo.ToString()
                :  string.Empty;

或者您可以使用 空合并运算符 ??

worksheet.Cells[ligne, 7].Value = resultat.CodeAlgo?.ToString() ?? string.Empty;

三元运算符?:

三元运算符的语法:

 output = condition ? expression 1 : expression 2;
  • 如果条件是get 分配给变量true的结果,否则将被分配。expression 1outputexpression 2

空值合并运算符??来自 MSDN

操作员 ??如果不为空,则返回其左侧操作数的值;否则,它计算右手操作数并返回其结果。这 ??如果左侧操作数的计算结果为非空,则运算符不会计算其右侧操作数。

空条件运算符?.

如果您在第二个解决方案中注意到,我使用?.了运算符,该运算符称为null 条件运算符。此运算符仅在resultat.CodeAlgo非空时执行。如果为null,它将返回null resultat.CodeAlgo,这将有助于我们避免空引用异常。


推荐阅读