2008-09-18 45 views
14

的潛在價值,我有以下枚舉聲明:如何獲得一個枚舉

public enum TransactionTypeCode { Shipment = 'S', Receipt = 'R' } 

如何從一個TransactionTypeCode.Shipment或TransactionTypeCode.Receipt「R」得到值「S」?

只要執行TransactionTypeCode.ToString(),就會給出一個Enum名稱爲「Shipment」或「Receipt」的字符串,因此它不會切斷芥末。

回答

3

試試這個:

string value = (string)TransactionTypeCode.Shipment; 
+0

其實它更復雜一點,我從我的示例複製錯誤的代碼,你不能有一個枚舉值的字符串。所以完整的答案將是((char)instance.Shipment),ToString() – 2008-09-18 22:02:11

+3

@GeorgeMauer你的枚舉的「基礎類型」仍然是「int」,所以你的定義真的說:`enum TransactionTypeCode {Shipment = 83,Receipt = 82,}`。出於某種原因,有一個從`char`到`int`的隱式轉換。你的枚舉唯一的「問題」(這可能不是問題)是`default(TransactionTypeCode)`沒有名字,因爲沒有成員等於0(或`'\ 0'`)。 – 2012-06-06 09:24:31

+3

這個答案在每個級別上都是明確錯誤的。先從它不會編譯的事實入手,繼續說明枚舉不是字符串,字符不是字符串,並且枚舉的基礎類型不是 - 也不是 - 字符串。 – 2014-05-21 16:24:31

2

我相信Enum.GetValues()是你在找什麼。

0

這是怎麼了,我一般設置我的枚舉:

public enum TransactionTypeCode { 

    Shipment("S"),Receipt ("R"); 

    private final String val; 

    TransactionTypeCode(String val){ 
    this.val = val; 
    } 

    public String getTypeCode(){ 
    return val; 
    } 
} 

System.out.println(TransactionTypeCode.Shipment.getTypeCode()); 
+1

這個問題是針對C#的。 – Iain 2012-08-29 07:27:30

0

我尋找那個和我得到的解決方案 使用轉換類

int value = Convert.ToInt32(TransactionTypeCode.Shipment); 

看看它是如何輕鬆

29

你必須檢查的基礎類型的枚舉,然後轉換爲正確的類型:

public enum SuperTasks : int 
    { 
     Sleep = 5, 
     Walk = 7, 
     Run = 9 
    } 

    private void btnTestEnumWithReflection_Click(object sender, EventArgs e) 
    { 
     SuperTasks task = SuperTasks.Walk; 
     Type underlyingType = Enum.GetUnderlyingType(task.GetType()); 
     object value = Convert.ChangeType(task, underlyingType); // x will be int 
    }  
1

基礎類型的枚舉仍在詮釋,只是有一個從char的隱式轉換到int出於某種原因。您枚舉相當於

TransactionTypeCode { Shipment = 83, Receipt = 82, } 

還要注意的是enum can have any integral type as underlying type except char,可能是一些語義原因。這是不可能的:

TransactionTypeCode : char { Shipment = 'S', Receipt = 'R', } 

要獲取char值回來了,你可以只使用一個演員。

var value = (char)TransactionTypeCode.Shipment; 

// or to make it more explicit: 
var value = Convert.ToChar(TransactionTypeCode.Shipment); 

第二個導致拳擊,因此應該更糟。所以可能會稍好些

var value = Convert.ToChar((int)TransactionTypeCode.Shipment); 

但很醜。鑑於性能/可讀性權衡,我更喜歡第一個(演員)版本。

0

枚舉的基礎值必須是數字。如果基礎值的類型是已知的,那麼簡單的強制轉換會返回枚舉的給定實例的基礎值。

enum myEnum : byte {Some = 1, SomeMore, Alot, TooMuch}; 
myEnum HowMuch = myEnum.Alot; 
Console.Writeline("How much: {0}", (byte)HowMuch); 

OUTPUT:多少:3

OR(接近原來的問題)

enum myFlags:int {None='N',Alittle='A',Some='S',Somemore='M',Alot='L'}; 
myFlags howMuch = myFlags.Some; 
Console.WriteLine("How much: {0}", (char)howMuch); 
//If you cast as int you get the ASCII value not the character. 

對我來說這是反覆出現的問題,我總是忘了一個簡單的投讓你的價值。