将变量设置为开关的结果
我是疯了还是有办法在C#中将变量设置为开关的结果? 就像是:
var a = switch(b) { case c: d; case e: f; default: g; };
有可能用其他语言吗? 我只是认为它是,但我没有得到任何编译。 提前致谢。
不, switch
是一个语句而不是可以计算的表达式。
当然,您可以将其提取到另一种方法中:
int x = DoSwitch(y); ... private int DoSwitch(int y) { switch (y) { case 0: return 10; case 1: return 20; default: return 5; } }
或者,您可以使用Dictionary
如果它只是简单的常量映射的情况。 如果您可以向我们提供有关您要实现的目标的更多信息,我们可以帮助您找出最实用的方法。
不,您不能将switch语句用作表达式。 编写它的另一种方法是嵌套条件运算符:
var a = b == c ? d: b == e ? f: g;
这在C#中是不可能的。
最接近的是将其移动到方法中,或者在每种情况下单独进行分配,即:
int a; switch(b) { case c: a = d; break; case e: a = f; break; default: a = g; break; };
有可能用其他语言吗?
是。 例如,大多数函数式语言都支持类似的东西。 例如,F#的模式匹配提供了一个(更强大的)版本。
如果你不是特别关注效率,那么使用generics来烹饪一个小类是很容易的,它允许你使用一个“流畅的”方法调用链,例如:
var a=Switch(b).Case(c).Then(d).Case(e).Then(f).Default(g);
或者,如果您愿意,更紧凑
var a=Switch(b).Case(c, d).Case(e, f).Default(g);
如果你对此感兴趣,我会很乐意做一个例子
在C#中switch
是一个没有“返回”值的语句。 如果你对使用“switch”表达感兴趣,你可以找到我在这里写的一些流畅的类,以便得到这样的代码:
a = Switch.On(b) .Case(c).Then(d) .Case(e).Then(f) .Default(g);
您可以更进一步,将函数参数更多地概括为Then
方法。
没有。
switch
语句提供分支控制。 它不是一个评估可以分配给变量的函数的函数。
我想要同样的东西,因为我使用Ruby非常多,这可以让你做那样的事情。 所以我创建了一个名为FluentSwitch的nuget包。