Soru Jenerik olan bir sayımın tamsayı değerini al


İşte temel durum.

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

Bu, gerçek sınıfın aşırı basitleştirilmesidir, fakat temel olarak, T'nin bir numaralandırma olduğunu biliyorum (eğer o değilse, başka birçok problem olacaktır ve programcı tarafından yapılan mantıksal bir hatadır).

Temel olarak, MyValue öğesinin temelindeki tamsayı değerini almak istiyorum.

Cint veya Ctype kullanarak çalışmıyor.


25
2017-12-18 18:48


Menşei


IEnumerable olarak sayımı tamamen yanlış okumuş :( - Joel Coehoorn


Cevaplar:


Serin bir yansıma kodu parçasını kullanacaktım ama sadece basit Convert.ToInt32 harika çalışıyor ... VB'yi affet C # bir erkeğim

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

44
2017-12-18 19:05





Bunu denedim ve işe yaradı:

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

6
2017-12-18 18:59



Peki bu bir içine dönüştürür sicim - Tamsayı olarak istediğini sanıyordum? - Jon Skeet


Tüm temel değerleri elde etmek için aşağıdakileri yapabileceğinizi biliyorum (umarım VB sözdizimi doğrudur ... C # 'da çalışıyorum.)

Dim intVal As Integer

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

En azından doğru yönde başlamana sebep olabilir.


3
2017-12-18 19:00





Bu ayrıca çalışır: Fix(enumval) 


1
2017-09-04 14:54





VB.NET'teki bir başka basit yol da 0'a eklemektir:

Dim intVal As Integer = 0 + myEnum

Yani, bu işe yarayacak:

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

0
2018-03-01 00:05



Bu, ne zaman çalışmayacak myEnum bir jenerik tip parametre türüdür, çünkü derleyici aslında bir enum olup olmadığını bilmez ve bu nedenle typecheck kullanıcısı değildir. +. - Pavel Minaev
Bu işe yaramıyor Option Strict On. - mbomb007


Jon Skeet'e teşekkürler. Ama onun kodu Excel-2016'mda çalışmıyor. Minn sonraki kod düzgün çalışıyor:

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

-1
2018-01-12 10:44