2013-03-30 31 views
1

我開始學習C#幾天了,sr如果是愚蠢的問題! 我有一個字符串數組這樣C#中的常量數組#

private readonly string[] algorithm_list = { 
               "Genetic Algorithm", 
               "Dynamic Algorithm" 
              }; 

和我的代碼

switch (al_choose) 
      { 
       case algorithm_list[0]: 
        break; 
       case algorithm_list[1]: 
        break; 
       default: 

      } 

的錯誤是algorithm_list [0]不是一個常數!所以我嘗試其他聲明一樣

private readonly string[] algorithm_list 

private contant string[] algorithm_list 

但它仍然無法正常工作???? 那麼,對我有何建議?非常感謝!

+0

重複:[切換案例在C# - 預期的常數值](http://stackoverflow.com/questions/7593377/switch-case-in-c-sharp-a-constant-value-is-預計) –

+0

不,這是不同的,因爲我想使這個在視圖中的列表項,並在代碼後面再次使用它,所以,這是我認爲的東西 – duykhoa

回答

7

對於這些情況,它能夠更好地使用Enum

public enum AlgorithmList 
{ 
     GeneticAlgorithm, 
     DynamicAlgorithm 
} 

然後:

switch (al_choose) 
{ 
    case AlgorithmList.GeneticAlgorithm: 
     break; 
    case AlgorithmList.DynamicAlgorithm: 
     break; 
    default: 
     break; 
} 

編輯如果你要在Enum的值綁定到一個ComboBox你可以做到這一點這樣:

yourCombobox.ItemsSource = Enum.GetValues(typeof(AlgorithmList)).Cast<AlgorithmList>(); 
+0

感謝您的幫助,但它仍然有問題在這裏,我有一個組合框在視圖中,這個加載算法列表作爲一個項目列表,並且它不接受枚舉類型。 – duykhoa

4

數組元素不是常量,因此您不能在switch語句中使用數組元素。

選項:

  • 取代的數組元素的使用內聯常數case "Genetic Algorithm":...或實際的恆定值const string Choice1="Genetic Algorithm";... case Choice1:...
  • if語句使用序列:對於這樣switch語句if (al_choose == algorithm_list[0]) { /*do something*/ }
  • 標準方法是「的選擇的詞典「到」行動委託「,但我不會跳到這一點。