2013-03-02 59 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"); 
} 
相關問題