在switch-case语句中使用和多个变量?

时间:2014-08-21 09:28:26

标签: c# switch-statement

我有这样的代码:

if(x==1 && y==2){
    something...
    }
    else if(x==4 && y==6){
    something...
    }
    else{
    something...
    }

我可以将其转换为switch case语句

3 个答案:

答案 0 :(得分:1)

你不能,因为开关只带一个变量;你有两个变量。 你总是可以稍微重构一下你的代码。

像:

if (x==1 && y==2) {
  //something...
  return;
}

if (x==4 && y==6) {
  //something...
  return;
}

//something...

更具可读性(imho)。

修改

这很疯狂:)但由于你的变量是整数,你可以将它们组合成一个长变量并使用开关。

像:

switch ((((long)x) << 32) + y) {
  case ((1L << 32) + 2):
    break;
  case ((4L << 32) + 6):
    break;
  default:
    break;
}

答案 1 :(得分:1)

嗯......如果你必须这样做:警告 - 黑客代码

int x;
int y;
var @switch= new Dictionary<Func<bool> statement, Action doIfTrue>
{
    {() => x == 1 && y == 2, something},
    {() => x == 4 && y == 6, somethingElse}
    {() => true, () = {} } // fallback action
};

@switch.Where(pair => pair.Key()).Select(pair => pair.Value).First()();

这可能会写得更简洁。

答案 2 :(得分:0)

它确实取决于更大的图片代码的外观,但我偶尔会使用以下技术。

switch (x*100+y) {
case 102:
// something...
break;
case 406:
// something...
break;
default:
// something...
}

它非常易读,但可能会失控。