[英]C# Enums and casting
如果在 C# 中聲明枚舉,則默認類型自動為 int。
那么,為什么在使用枚舉時的 case 語句或其他情況下,您必須顯式重鑄才能使用這些值? 如果您必須明確區分大小寫,或者我只是在這里做錯了什么,那么擁有基礎類型有什么意義?
private enum MyEnum
{
Value1,
Value2,
Value3
}
switch (somevalue)
{
case (int)MyEnum.Value1:
someothervar = "ss";
break;
case (int)MyEnum.Value2:
someothervar = "yy";
break;
case (int)MyEnum.Value3:
someothervar = "gg";
break;
}
somevalue 的類型是什么? 如果類型是 MyEnum,則不需要強制轉換,並且應該可以正常工作。
如果類型是 int 那么是的,您必須轉換為 MyEnum 才能正確切換 / 大小寫。 但是您可以通過強制轉換值而不是每個 case 語句來簡化這一點。 例如
switch( (MyEnum)somevalue ) {
case MyEnum.Value1: ...
}
顯然 somevalue 是 integer 而不是明確鍵入為您的枚舉。 您應該記住,枚舉的基礎值只是“存儲類型” ,並且不能隱式互換。 但是,您可以輕松地使用 cast 運算符使您的代碼簡單且“更多”類型安全:
private enum MyEnum { Value1, Value2, Value3 }
switch ((MyEnum)somevalue)
{
case MyEnum.Value1:
someothervar = "ss";
break;
case MyEnum.Value2:
someothervar = "yy";
break;
case MyEnum.Value3:
someothervar = "gg";
break;
default:
throw new NotSupportedException();
}
最終,您會想要一個不必從 integer 轉換為枚舉的設計,但在從磁盤或數據庫讀取時,通常情況並非如此。
如果somevalue
是MyEnum
類型,則不必強制轉換為int
。
public enum Color
{
Red,
Blue,
Green
}
class Program
{
static void Main(string[] args)
{
Color color = Color.Red;
switch (color)
{
case Color.Red:
break;
case Color.Blue:
break;
case Color.Green:
break;
}
}
}
正如其他人所說:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.