當閱讀Jon Skeet對這個特定問題的回答How can I make it so my class variables can only be set to one of three choices?我學到了一些新的東西,我不知道在C#中,我猜測CLR類型系統。爲什麼即使在枚舉中沒有定義有效值時也允許使用枚舉轉換
這是什麼是合法的理由:
public enum Tests
{
Zero = 0,
One,
Two
}
var nonExistantTestsValue = (Tests)1000;
這將編譯完全沒有問題,但我不明白爲什麼它應該是這樣的原因。就我所能看到的而言,枚舉的所有要點是將特定類型的給定變量的值限制爲一定數量的選項。
如果enum
定義所強加的限制很容易被破壞,那麼除了可讀性問題之外,還有什麼意義?你顯然可以確定它是一個使用反射的有效值,但爲什麼這不是在編譯時完成的?
這可能是一個很好的理由,它的工作方式,但我看不到它。
[?爲什麼鑄造INT無效枚舉值不會拋出異常]的可能重複(http://stackoverflow.com/questions/6413804/why-母鹿s-cast-int-to-invalid-enum-value-not-throw-exception) – nawfal