web-dev-qa-db-ja.com

一般的な列挙型の整数値を取得します

これが基本的な状況です。

Public Class MyEnumClass(of T)
   Public MyValue as T
End Class

これは実際のクラスを大幅に単純化しすぎですが、基本的にはTが列挙型であることを知っています(そうでない場合、他の多くの問題が発生し、プログラマーによって論理エラーが発生します)。

基本的には、MyValueの基になる整数値を取得したいと考えています。

CintまたはCtypeを使用しても機能しません。

29
Ross Goddard

クールなリフレクションコードを使用するつもりでしたが、単純な Convert.ToInt32 うまくいきます...許してくださいVB私はC#の人です

Public Function GetEnumInt(Of T)(enumVal As T) As Integer
    Return Convert.ToInt32(enumVal)
End Function
52
joshperry

私はこれを試してみましたがうまくいきました:

String.Format("{0:d}", MyValue)
7
Ross Goddard

すべての基本的な値を取得するために次のことができることを知っています(VB構文が正しいことを願っています...私は最近C#で作業してきました):

Dim intVal As Integer

For Each intVal In  [Enum].GetValues(GetType(T))
    //intValue is now the enum integer value
Next

そうすれば、少なくとも正しい方向に進むことができます。

3
Jason Down

これも機能します:Fix(enumval)

1
anefeletos

VB.NETのもう1つの簡単な方法は、0に追加することです。

Dim intVal As Integer = 0 + myEnum

だから、これはうまくいくはずです:

Sub GetEnumInt(of T)(enumVal as T) as Int
   return 0 + enumVal
End Sub
0
Glen Little