6月 03, 2008

.NetのEnum型

写真Enumって、定義した値しか使えないんじゃないの?
けど内部的には数値型なんだよなぁ。
解説しているサイトでは、ことごとく「定義した値しか使えない」ってところを押してるんだけど、
(以下、VB.net)
Enum AtaiType
  TYPE1 = 1
  TYPE2 = 2
End Enum
Dim atai As AtaiType
atai = DirectCast(3, AtaiType)
とかしても怒られない。
てっきりInvalidCastExceptionを投げてくれるかと思ったんだけどなぁ。
データベースから読んだ値が定義されている物かどうか調べたかったんだけどね。
そんなのテーブルの制約つけろよってところに行くんだろうけど、お客さんの居る話な訳でいろいろとあるわけですよ。

結局
atai = DirectCast(Integer.Parse(atai_value.Trim()), AtaiType)
Dim atai_type_str As String = System.Enum.GetName(GetType(AtaiType), atai)
If atai_type_str Is Nothing Then
  Throw New InvalidCastException(atai_value.Trim() & "は範囲外の値です。")
End If
なんてことに。

0 件のコメント:

コメントを投稿