我很佩服? : 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中也很受欢迎。
答案 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";});
这允许复杂的表达,副作用等。
就个人而言,我认为我不会这样做。