更简单的表示法或在 C# 中执行 If Else 的方法

Simpler Notation or Way to do If Else in C#

我很佩服? : operator的简洁,喜欢

bool b;
int x,y,z;

x = b ? y : z;

替换

if(b)
  x = y;
else
  x = z;

所以我想知道是否有一些更简单的符号或方法 if/else 在更复杂的表达式中,或者做一些有点像 lambda 的东西,我可以在 lamda 中编写更复杂的动作?

例如,可能是一些虚构的符号,例如 @ $

要做

x = b @ { z*=3.14; return y; }   //if b true do z*=3.14 and x = y
      $ { y-= 100; return z; }   //if b false do y-=100 and x = z

bool b , c
int[] count = new[] {0, 0, 0};

b @ count[0]++ //if b is true do count[0]++ 
  $ c @ count[1]++  //if b is false c is true do count[1]++ 
      $ count[2]++;  //if b,c all false do count[2]++

我认为 if/else 表示法非常简短,但是我很高兴知道是否有更简单的方法。

希望在C#5.0下也能用,C#6.0也欢迎

您可以使用带有 lambda 的通用扩展方法:

public static T IIf<T>(this bool valueToCheck, Func<T> ifTrue, Func<T> ifFalse)
{
    return valueToCheck ? ifTrue() : ifFalse();
}

并这样称呼他们:

bool flag = ComputeABoolean();
var result = flag.IIf(() => { Console.WriteLine("Yeah this is sort of crazy"); return "Value was true."; },
                      () => { Console.WriteLine("But it does work."); return "value was false";});

这允许复杂的表达式、副作用等

就我个人而言,我认为我永远不会这样做。