我疯了,还是有一种方法,在C#中,将变量设置为开关的结果?例如:将一个变量设置为开关的结果
var a = switch(b)
{
case c:
d;
case e:
f;
default:
g;
};
是否有可能使用任何其他语言?我只是认为这是,但我没有得到任何东西来编译。提前致谢。
我疯了,还是有一种方法,在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
如果它只是简单的,不变的映射关系的情况。如果您可以向我们提供更多关于您想要达到的目标的信息,我们可以帮助您制定出最实用的方式。
不,我当然可以通过一百万种方式来解决它,我只是在每个陈述中都有a =无论如何,并且我认为我已经看到了这种情况。可能不会。好吧。没什么大不了。 – vbullinger
“字典”正是我所需要的,谢谢! –
不,您不能使用switch语句作为表达式。写它的另一种方式是嵌套条件运算符:
var a = b == c ? d:
b == e ? f:
g;
号
一个switch
语句提供分支控制。它不是一个函数,它可以被分配给一个变量。
这在C#中是不可能的。
最接近的将是要么移动到这一点的方法,或做在每种情况下单独分配,即:
int a;
switch(b)
{
case c:
a = d; break;
case e:
a = f; break;
default:
a = g; break;
};
是否有可能在任何其他的语言吗?
是的。例如,大多数功能语言都支持类似的东西。例如,F#的pattern matching提供了一个(更强大的)版本。
如果你不是特别在意效率,这将是很容易煮了使用泛型,允许您使用方法的“流畅”链有点类调用像这样:
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);
如果您对此有兴趣,我很乐意编造一个例子
哇,这正是我所做的[这里](http://stackoverflow.com/questions/3334138/combine-return-and-switch/3334876#3334876) –
哦,这是甜的! –
...虽然我认为你的实现可以被简化......你可以用不可变的数据结构来实现它,并且不需要维护字典。如果您不介意,我可能会对其他线索发表评论:-) –
switch
在C#是一个语句没有“回报”价值。如果你有兴趣在具有“开关”的表情,你可以找到我为了写here小流利类有这样的代码:
a = Switch.On(b)
.Case(c).Then(d)
.Case(e).Then(f)
.Default(g);
你可以走一步和推广这种更其功能参数为Then
方法。
'switch(b){case c:a = d;情况e:a = f;默认:a = g;}' –
F#有这样的 – BLUEPIXY