更简单的符号或方法如果在C#中有其他

时间:2017-02-07 02:13:31

标签: c# c#-6.0

我很佩服? : 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中也很受欢迎。

1 个答案:

答案 0 :(得分:2)

您可以使用lambdas的通用扩展方法:

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";});

这允许复杂的表达,副作用等。

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