[英]Can I cast an int into a C# enum type?
我有一個帶有兩個值的枚舉(基礎類型為int
),以及一個帶有該類型參數的方法。 是否可以將任何int值轉換為我的枚舉類型並將其傳遞給方法? 如果是這樣,枚舉的優點是什么? 是不是應該限制可用值的選擇?
class Program
{
public void Greeting(MyCode code)
{
Console.WriteLine(code);
}
static void Main(string[] args)
{
var p = new Program();
var m = new MyCode();
m = (MyCode) 3;
p.Greeting(m);
}
}
public enum MyCode:int
{
Hello =1,
Hai
}
是的,您可以轉換基礎類型的任何值。 在這種意義上,枚舉類型不是限制類型。
使用枚舉的優點是:
我同意更多類型也是有用的,但它在C#中不存在。 您可以在C#中構建自己的基於類的“偽枚舉”,它允許一組受限制的值(使用私有構造函數),但是:
另一方面,這些類型可以多態地行動並且具有比普通枚舉更多的信息,這可以是有用的。
只是為了補充Jon的答案:你可以隨時使用
Enum.IsDefined(typeof(MyCode), value)
檢查枚舉定義中是否存在提供的值。
在許多方面,Enums在.NET語言中被實現為語法糖 。 報價,
enum關鍵字用於聲明枚舉,這是一種由稱為枚舉器列表的命名常量組成的不同類型。
換句話說,枚舉的值是與任何其他字段一樣的字段,而不是值的整數選擇。 沒有什么可以阻止您將無效值轉換為枚舉。 你可以做的最大的努力來確保枚舉的有效內容是使用Enum.IsDefined
靜態方法(盡管你可能想要定義擴展方法,如果這需要你的想象)。
然而,枚舉的目的不是驗證用戶輸入,因此它們不必像那樣嚴格。 枚舉的目的是將名稱綁定到數值,並輕松顯示此類可能組合的列表。 並且不要忘記他們的松散結構允許像Day.Saturday | Day.Friday
一樣的東西 Day.Saturday | Day.Friday
或更復雜的聯軸器。 它們仍然非常有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.