2008-10-16 107 views

回答

15

舉一個稍微不同的答案......而值是類型安全的從鑄造角度看,他們仍然選中,一旦他們投 - 即

enum Foo { A = 1, B = 2, C = 3 }  
static void Main() 
{ 
    Foo foo = (Foo)500; // works fine 
    Console.WriteLine(foo); // also fine - shows 500 
} 

出於這個原因,你應該採取請注意檢查值 - 例如switch中的default會引發異常。

你也可以檢查(用於非 [Flags]值)通過:

bool isValid = Enum.IsDefined(typeof(Foo), foo); 

+0

+1爲Enum.IsDefined提示。 – OregonGhost 2008-10-16 14:03:56

+0

哦,這是一個很好的提示。我不知道這個..總是認爲它會拋出一個InvalidCastException或其他東西。絕對+1我! – 2008-10-16 14:15:02

11

是的,他們是。

以下是http://www.csharp-station.com/Tutorials/Lesson17.aspx

枚舉是強類型的常量。它們本質上是獨特的類型,允許您將符號名稱分配給整數值。在C#傳統中,它們是強類型的,這意味着即使其成員的基礎值相同,一種類型的枚舉也可能不會隱式分配給另一種類型的枚舉。沿着相同的路線,整數類型和枚舉不是可以互換的。不同的枚舉類型和整型類型之間的所有賦值都需要明確的轉換。

0

Yes they are

枚舉是強類型的常量。 它們本質上是唯一的類型, 允許您將符號名稱分配給 整數值。在C#中的傳統, 它們是強類型的,這意味着 一種類型的枚舉可能不 隱式分配給的 另一種類型的枚舉,即使其成員的 潛在價值是 相同。沿着相同的路線, 整數類型和枚舉不是 隱含可互換。所有 不同枚舉類型和整型類型之間的賦值都需要顯式強制轉換 。

+0

重新整型類型:除了文字0,其中*是*隱式。 – 2008-10-16 13:00:57

0

是的。

C#:枚舉類型:命名值的

-A類型安全的枚舉。

-Prevents編程錯誤

- 用戶可以控制基本類型(默認爲int)

- 也可以控制基礎值

0

技術上沒有,因爲你可以代表一個枚舉作爲基礎值( int,long等)。但是,如果確保只按其提供的名稱使用枚舉,則如果更改枚舉值的名稱而不更新其引用,則會收到編譯時錯誤。在這方面,它是類型安全的。

0

我來晚了這裏的聚會,但我想扔了一點點額外的東西...來自Krzysztof Cwalina的.NET Framework Design Guidelines的更新。除了上面關於檢查以確保將有效值傳遞給您的枚舉的優秀技巧之外,這還提供了有關如何有效使用它們的一些指導和建議,一堆陷阱(特別涉及Flags枚舉)等。

2

對於那些建議使用Enum.IsDefined進行參數驗證的人......不要! Per Brad Abrams(來自Framework Design Guidlines Update on Enum Design):

Enum.IsDefined()確實有兩個問題。首先,它加載反射和一些冷類型元數據,使其成爲一個看似昂貴的調用。其次,正如註釋暗示的那裏存在版本問題。

0

是他們r強類型薩法德你無法不這樣做枚舉常量變量integeral價值impilcit皈依üHV 2 expilcitly做的DAT 如 枚舉天{ 太陽, 週一 } INTË =(int)days.sun; console.writeline(e);

0

C#枚舉是類型安全的含義

  1. 不能隱式地從底層的類型轉換爲實際的枚舉
  2. 此外,你不能在一個枚舉的值賦給另一個枚舉,即使相關類型兩個枚舉都是相同的。明確的轉換總是需要的。
  3. 枚舉使您的代碼更具可讀性,更易於維護。

我來過一個關於枚舉擴展其類型安全性質的優秀視頻教程。看看herethere