将变量设置为开关的结果

我是疯了还是有办法在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包。