2011-11-07 38 views
-3

爲什麼以下工作(編譯):開關,如果在C#

public void SaveCurrentTab(string currentTabIndex) 
     { 
      if (currentTabIndex == MainInfoPnl.ClientID) 
       PartialSave1(); 
      else if (currentTabIndex == ContactInfoPnl.ClientID) 
       PartialSave2(); 
      else if (currentTabIndex == BankInfoPnl.ClientID) 
       PartialSave3(); 
      else if (currentTabIndex == ServicesPnl.ClientID) 
       PartialSave4(); 
      else if (currentTabIndex == AttachmentsPnl.ClientID) 
       PartialSave5(); 

     } 

但是,下列情況不?

public void SaveCurrentTab(string currentTabIndex) 
     { 
      switch (currentTabIndex) 
      { 
       case MainInfoPnl.ClientID: 
        PartialSave1(); 
        break; 
       case ContactInfoPnl.ClientID: 
        PartialSave2(); 
        break; 
       case BankInfoPnl.ClientID: 
        PartialSave3(); 
        break; 
       case ServicesPnl.ClientID: 
        PartialSave4(); 
        break; 
       case AttachmentsPnl.ClientID: 
        PartialSave5(); 
        break; 
      } 

     } 
+0

這是一種語言限制。 C#將開關表達式限制爲整型(更嚴格地說,在這裏:http://msdn.microsoft.com/en-us/library/k0t5wee3(v=vs.80).aspx) – Zruty

+1

「不起作用」是一個可怕的問題描述。 –

+1

但它很簡潔。 – Alexandre

回答

9

大概是因爲MainInfoPnl.ClientID是不是編譯時間常數。例如,它可能是public static readonly,與const不一樣。如果這沒有幫助,向我們展示更多關於代碼和錯誤信息。

3

對於switch - if條件的情況陳述必須是恆定字符串,沒有此限制。

0

試試這個:

public void SaveCurrentTab(string currentTabIndex) 
     { 
      switch (Convert.ToInt32(currentTabIndex)) 
      { 
       case (int)MainInfoPnl.ClientID: 
        PartialSave1(); 
        break; 
       case (int)ContactInfoPnl.ClientID: 
        PartialSave2(); 
        break; 
       case (int)BankInfoPnl.ClientID: 
        PartialSave3(); 
        break; 
       case (int)ServicesPnl.ClientID: 
        PartialSave4(); 
        break; 
       case (int)AttachmentsPnl.ClientID: 
        PartialSave5(); 
        break; 
      } 

     } 
+1

這不是一個打字問題,它是編譯時間常量與運行時間值的比較。 – pjvds

+0

你的意思是這不起作用? –

+0

假設這些字段不是隻讀的編譯時常量是。對於在運行時創建的值,開關將不起作用。在這些情況下應該使用簡單的if-else。 – pjvds

2

在C#中的交換機只能與常量值的作品。對於運行時確定的值,使用if-else結構。