我想知道爲什麼我們不能有「字符」作爲基礎枚舉類型。 因爲我們有字節,sbyte,int,uint,long,ulong,short,ushort作爲底層 枚舉類型。 第二什麼是一個枚舉的默認基礎類型?爲什麼我們不能有「字符」枚舉類型
回答
默認類型是int。在MSDN上的C#reference的更多信息。您也可以在MSDN上找到指向C# language specification的鏈接。我認爲限制的原因可能來自語言規範4.1.5節中的這些陳述。
char類型歸類爲 整數類型,但它會從 其他整數類型有兩點不同:
•有其他類型char類型的隱式轉換 。在 特別是,即使爲sbyte, 字節和ushort類型具有完全可以表示的 使用char類型 值的範圍,從爲sbyte,byte或 USHORT隱 轉換爲char不存在。
•char類型的常量必須 寫爲字符文字或作爲 整數文字結合有 強制轉換爲類型炭。例如, (char)10與'\ x000A'相同。
字符枚舉將簡單地是字符串不是嗎?我不確定你會從字符枚舉中獲得哪些其他好處?
正如其他人所說,枚舉的默認類型是int。
從技術上講,你不能這樣做。但是,您可以將枚舉轉換爲一個字節,然後將其轉換爲字符。這是有用的,如果你的目標是有這樣的事情(實現,這是不可能做到的:
public enum CharEnum
{
one = '1'
}
你可以這樣做,但是,通過使用ASCII字節的值,然後轉換:
public enum CharEnum
{
one = 49,
two = 50
}
然後你可以轉換爲byte和char來獲得char值,但它不是很漂亮,但是它會起作用,如果得到一個char是你的最終目標,你也可以使用unicode和一個int值,如果你需要外部字符:-)
這是我使用的解決方法
enum MyEnum
{
AA = 'A',
BB = 'B',
CC = 'C'
};
static void Main(string[] args)
{
MyEnum e = MyEnum.AA;
char value = (char)e.GetHashCode(); //value = 'A'
}
或者你可以不用`GetHashCode()`來寫'(char)e`。 – 2013-03-27 02:03:12
所有你需要的是'(char)e`。 [你通過`enum.GetHashCode`獲得了拳擊懲罰。](http://stackoverflow.com/questions/7995606/boxing-occurrence-in-c-sharp) – nawfal 2013-12-01 20:04:58
我知道這是一個老問題,但這些信息會一直幫助我:
看來,有使用字符作爲值類型在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
}
得好好的,就像你會期望從字符類型!
幾乎所有的事情已經有人說過了。只想說,如果你使用了大量的「字符枚舉」,你可以使用擴展:
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());
}
}
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)在如果在所有情況下取決於枚舉類型。但是,如果你直接將它轉換爲枚舉類型本身,它應該始終工作。
- 1. 不能字符串轉換爲枚舉類型,我創建
- 2. 爲什麼我們需要在C#中類型轉換枚舉
- 3. 爲什麼我不能從枚舉中得到字符串?
- 4. 爲什麼我們不能從C#中的枚舉實例訪問枚舉值?
- 5. 爲什麼我們訪問枚舉值::
- 6. 爲什麼我不能將枚舉作爲另一個枚舉的基礎類型?
- 7. 爲枚舉類型
- 8. 嵌套枚舉不能訪問枚舉類的私有字段
- 9. 枚舉類型的默認修飾符字段是什麼?
- 10. 爲什麼我們在枚舉中寫入Integer而不是int?
- 11. 枚舉拋出「不是枚舉類型」
- 12. 「===」不能應用於類型「串」和「枚舉」字符串值
- 13. ASN.1枚舉類型和選擇類型有什麼區別?
- 14. 如何枚舉類型設置爲字符串類型
- 15. 什麼是枚舉類型的操作?
- 16. 什麼是枚舉的返回類型|?
- 17. 什麼是Objective-C的枚舉類型
- 18. 什麼是通枚舉類型的WebAPI
- 19. 枚舉類「不能轉換爲無符號整型」
- 20. 爲什麼我要訪問枚舉類型而不創建枚舉初始化類的對象?
- 21. 爲什麼枚舉包括可枚舉
- 22. 爲什麼會枚舉類型沒有使用定義
- 23. 爲什麼這個枚舉類型沒有正確解析?
- 24. 解析字符串枚舉類型
- 25. 字符的.NET枚舉基類型
- 26. 從字符串獲取枚舉類型
- 27. 爲什麼我們不能從父類
- 28. 爲什麼不是Byte默認的枚舉類型?
- 29. 爲什麼基類枚舉不能繼承?
- 30. 爲什麼我不能用GcHandle.Alloc引腳枚舉
從NCHAR(0001)數據庫列和枚舉轉換數據庫時非常有用。具體而言,在select中查看它時有意義,但僅限於特定的一組值,這很有用。舉個例子:狀態。待處理:'P',進行中:'我',成功完成:'S',失敗:'F'。 – 2012-02-20 22:11:17
我第二次數據庫評論,因爲這正是導致我這個問題。 – Nathan 2017-11-17 22:27:45