2013-11-27 49 views
1

我的問題是,我有一個組合框填充單位,如長度或重量ie。英寸,腳,圍場。或者Oz,Lb,Ton。反正我有枚舉如C#獲取comboBox值並從字符串轉換爲自定義枚舉

public enum Torques { 

    /// <remarks/> 
    DyneCentimeters, 

    /// <remarks/> 
    FootPounds, 

    /// <remarks/> 
    InchPounds, 

    /// <remarks/> 
    KilogramMeter, 

    /// <remarks/> 
    MeterNewtons, 
} 

我需要抓住下來的價值了液滴和創建匹配枚舉類型的變量的一種優雅的方式。現在我使用CASE語句,如

Computers fromUnit = Computers.Bit; 
      switch (compFromUnit.Text) 
      { 
       case "Bit": 
        fromUnit = Computers.Bit; 
        break; 
       case "Byte": 
        fromUnit = Computers.Byte; 
        break; 
       case "Kilobyte": 
        fromUnit = Computers.Kilobyte; 
        break; 
       case "Megabyte": 
        fromUnit = Computers.Megabyte; 
        break; 
       case "Gigabyte": 
        fromUnit = Computers.Gigabyte; 
        break; 
       case "Terabyte": 
        fromUnit = Computers.Terabyte; 
        break; 
       case "Petabyte": 
        fromUnit = Computers.Petabyte; 
        break; 
       default: 
        fromUnit = Computers.Bit; 
        break; 
      } 

我的一些名單是相當漫長的,並完成這樣的項目將要求一些很長的case語句。我知道在一行代碼中必須有一些完成這一切的方法。

當我嘗試爲諸如combo.selected.Text =「Bit」combo.selected.Value =「Computers.Bit」之類的選擇賦值時,然後說出類似toUnit = combo.selected.value的內容它不能從字符串轉換。

+0

您是使用WinForms還是WPF? – deloreyk

回答

2

如果你是積極的,在組合框的下拉列表中的字符串值完全符合您的枚舉值(似乎是在你的例子),你可以使用Enum.Parse

var userSelection = (Computers)Enum.Parse(typeof(Computers), compFromUnit.Text); 

如果有他們將不會匹配任何機會正好,使用Enum.TryParse代替:

Computers userSelection; 

if (!Enum.TryParse(compFromUnit.Text, out userSelection)) 
{ 
    // You've got a value that doesn't exist in the Enum... do something 
} 
+0

感謝Grant,我知道必須有一個簡單的解決方案,那就是這些語言的全部原因。我真的很感謝快速而非常有用的迴應。它像一個魅力:) – user3042911

+0

不客氣! –

0

Enum.TryParse會滿足您的需求在這裏。

Computers fromUnit; 
var succes = Enum.TryParse(compFromUnit.Text, out fromUnit); 

if(!succes) 
{ 
    // Invalid string value 
} 
+0

感謝您的迴應:) – user3042911