2009-02-21 71 views

回答

15

默認類型是int。在MSDN上的C#reference的更多信息。您也可以在MSDN上找到指向C# language specification的鏈接。我認爲限制的原因可能來自語言規範4.1.5節中的這些陳述。

char類型歸類爲 整數類型,但它會從 其他整數類型有兩點不同:

•有其他類型char類型的隱式轉換 。在 特別是,即使爲sbyte, 字節和ushort類型具有完全可以表示的 使用char類型 值的範圍,從爲sbyte,byte或 USHORT隱 轉換爲char不存在。

•char類型的常量必須 寫爲字符文字或作爲 整數文字結合有 強制轉換爲類型炭。例如, (char)10與'\ x000A'相同。

-4

字符枚舉將簡單地是字符串不是嗎?我不確定你會從字符枚舉中獲得哪些其他好處?

正如其他人所說,枚舉的默認類型是int。

+2

從NCHAR(0001)數據庫列和枚舉轉換數據庫時非常有用。具體而言,在select中查看它時有意義,但僅限於特定的一組值,這很有用。舉個例子:狀態。待處理:'P',進行中:'我',成功完成:'S',失敗:'F'。 – 2012-02-20 22:11:17

+0

我第二次數據庫評論,因爲這正是導致我這個問題。 – Nathan 2017-11-17 22:27:45

3

從技術上講,你不能這樣做。但是,您可以將枚舉轉換爲一個字節,然後將其轉換爲字符。這是有用的,如果你的目標是有這樣的事情(實現,這是不可能做到的:

public enum CharEnum 
{ 
    one = '1' 
} 

你可以這樣做,但是,通過使用ASCII字節的值,然後轉換:

public enum CharEnum 
{ 
    one = 49, 
    two = 50 
} 

然後你可以轉換爲byte和char來獲得char值,但它不是很漂亮,但是它會起作用,如果得到一個char是你的最終目標,你也可以使用unicode和一個int值,如果你需要外部字符:-)

13

這是我使用的解決方法

enum MyEnum 
{ 
    AA = 'A', 
    BB = 'B', 
    CC = 'C' 
}; 

static void Main(string[] args) 
{ 
    MyEnum e = MyEnum.AA; 
    char value = (char)e.GetHashCode(); //value = 'A' 
} 
+5

或者你可以不用`GetHashCode()`來寫'(char)e`。 – 2013-03-27 02:03:12

+4

所有你需要的是'(char)e`。 [你通過`enum.GetHashCode`獲得了拳擊懲罰。](http://stackoverflow.com/questions/7995606/boxing-occurrence-in-c-sharp) – nawfal 2013-12-01 20:04:58

76

我知道這是一個老問題,但這些信息會一直幫助我:

看來,有使用字符作爲值類型在C#.NET 4.0枚舉(沒問題甚至可能是3.5,但我沒有測試過)。下面是我做了什麼,以及它全部工作:

public enum PayCode { 
    NotPaid = 'N', 
    Paid = 'P' 
} 

轉換枚舉爲char:

PayCode enumPC = PayCode.NotPaid; 
char charPC = (char)enumPC; // charPC == 'N' 

將char轉換到枚舉:

char charPC = 'P'; 
if (Enum.IsDefined(typeof(PayCode), (int)charPC)) { // check if charPC is a valid value 
    PayCode enumPC = (PayCode)charPC; // enumPC == PayCode.Paid 
} 

得好好的,就像你會期望從字符類型!

-1

幾乎所有的事情已經有人說過了。只想說,如果你使用了大量的「字符枚舉」,你可以使用擴展:

public enum MyEnum 
{ 
    MY_VALUE = 'm' 
} 

public static class MyExtensions 
{ 
    public static char GetChar(this Enum value) 
    { 
     return (char)value.GetHashCode(); 
    } 
} 

class Program 
{ 
    public static void Main(string[] args) 
    { 
     MyEnum me = MyEnum.MY_VALUE; 
     Console.WriteLine(me + " = " + me.GetChar()); 
    } 
} 
0
char charPC = 'P'; 
if (Enum.IsDefined(typeof(PayCode), (PayCode)charPC)) { 
     // check if charPC is a valid value 
     PayCode enumPC = (PayCode)charPC; // enumPC == PayCode.Paid 
} 
  • 做了小改動,無需將其轉換爲一個(INT)在如果在所有情況下取決於枚舉類型。但是,如果你直接將它轉換爲枚舉類型本身,它應該始終工作。