2013-03-02 30 views
2

是否可以确定当前正在评估哪个案例?事情是这样的示例代码:如何确定switch语句中的当前情况?

const int one = 1; 
const int two = 2; 

int current_num = 1; 

switch (current_num){ 
     case one: 
     case two: 
      WriteLine(current_case) //outputs 'one' 
      break; 
} 

我相信我会变得棘手和使用字典什么的来查找current_num一旦我开始WriteLine,但也可能有一个内置的方式来获得当前正在评估的当前案件的名称。

编辑:简而言之,这是不可能的。检查JonSkeet的答案是一个合理的选择。

+1

这是无效的C#开始,因为'case'表达式只能是常量。我认为你正在尝试做一些真正不存在的东西... – 2013-03-02 17:33:41

+0

@JonSkeet:true,但是如果你用1等替换“one”,它仍然是一个有趣的问题。尽管我非常怀疑没有IL编织或其他后处理技术是可能的。 – Alxandr 2013-03-02 17:35:13

+0

@Alxandr:如果用1替换“one”,那么为什么不使用'WriteLine(current_num)'?真的不清楚OP究竟在努力达到什么 - 我已经发布了一个可能会有所帮助的答案,但我们可以做得更清楚。 – 2013-03-02 17:36:19

回答

5

这不是真的清楚你想要做什么,但我怀疑你会用一个枚举更好:

enum Foo { 
    One = 1, 
    Two = 2, 
    Three = 3 
} 

... 

int someValue = 2; 
Foo foo = (Foo) someValue; 
Console.WriteLine(foo); // Two 

,您仍然可以case语句中使用这样的:

switch (foo) { 
    case Foo.One: 
    case Foo.Two: 
     Console.WriteLine(foo); // One or Two, depending on foo 
     break; 
    default: 
     Console.WriteLine("Not One or Two"); 
} 
相关问题