Получить целочисленное значение перечисления, которое является общим - PullRequest
29 голосов
/ 18 декабря 2008

Вот основная ситуация.

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

Это значительно упрощает реальный класс, но в основном я знаю, что T - это перечисление (если его нет, то возникнет много других проблем, и это логическая ошибка, допущенная программистом)

В основном я хочу получить базовое целочисленное значение MyValue.

Использование Cint или Ctype, не работает.

Ответы [ 6 ]

51 голосов
/ 18 декабря 2008

Я собирался использовать классный фрагмент кода отражения, но просто Convert.ToInt32 прекрасно работает ... Прости мой VB, я парень на C #

Public Function GetEnumInt(Of T)(enumVal As T) As Integer
    Return Convert.ToInt32(enumVal)
End Function
7 голосов
/ 18 декабря 2008

Я попробовал это, и это сработало:

String.Format("{0:d}", MyValue)
3 голосов
/ 18 декабря 2008

Я знаю, что вы можете сделать следующее, чтобы получить все базовые значения (надеюсь, мой синтаксис VB правильный ... Я работал на C # в основном в последнее время):

Dim intVal As Integer

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

Это может, по крайней мере, заставить вас начать в правильном направлении.

1 голос
/ 04 сентября 2017

Это также работает: Fix(enumval)

0 голосов
/ 12 января 2018

Благодаря «Джону Скиту». Но его код не работает в моем Excel-2016. В то время как следующий код работает нормально:

Public Enum TypOfProtectWs
    pws_NotFound = 0
    pws_AllowAll = 1
    pws_AllowFormat = 2
    pws_AllowNone = 3
End Enum

Private Function TypOfProtectWs2I(pws As TypOfProtectWs) As Integer
    TypOfProtectWs2I = Format("0", pws)
End Function

Private Sub test_TypOfProtectWs2I()
    Debug.Print TypOfProtectWs2I(pws_AllowAll)
End Sub
0 голосов
/ 01 марта 2013

Еще один простой способ в VB.NET - добавить его к 0:

Dim intVal As Integer = 0 + myEnum

Итак, это должно работать:

Sub GetEnumInt(of T)(enumVal as T) as Int
   return 0 + enumVal
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...