2008-12-18 12 views
23

है मूल स्थिति यहां है।एक गणना का पूर्णांक मान प्राप्त करें जो एक सामान्य

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

यह वास्तविक वर्ग के विशाल अति सरलीकरण है, लेकिन मूल रूप से मैं जानता हूँ कि टी एक गणन है (अगर यह नहीं तो कई अन्य समस्याओं हो जाएगा, और एक तार्किक प्रोग्रामर द्वारा बनाई गई त्रुटि है)

मूल रूप से मैं MyValue के अंतर्निहित पूर्णांक मान प्राप्त करना चाहता हूं।

सिंट या प्रकार का उपयोग करना, काम नहीं करता है।

+0

IEnumerable रूप :( –

उत्तर

40

मैं प्रतिबिंब कोड का एक शांत टुकड़ा का उपयोग करने के लिए जा रहा था, लेकिन सिर्फ एक सरल Convert.ToInt32 अच्छा काम करता है ... मेरी वीबी माफ कर दो मैं एक सी # पुरुष

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

मैं इस कोशिश की और यह काम किया:

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

खैर है कि यह एक * स्ट्रिंग * में धर्मान्तरित मैं पूरी तरह से गलत पढ़ा गणन - मैंने सोचा था कि आप एक पूर्णांक के रूप में यह चाहता था –

3

मैं जानता हूँ कि आप सभी अंतर्निहित मूल्यों (मुझे आशा है कि मेरी वीबी वाक्य रचना सही है ... मैं सी # में ज्यादातर काम कर रहा है प्राप्त करने के लिए निम्न कर सकते हैं देर से):

Dim intVal As Integer 

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

शायद कम से कम आपको सही दिशा में शुरू हो सकता है।

0

VB.NET में एक और आसान तरीका है कर रहा हूँ यह 0 में जोड़ें:

Dim intVal As Integer = 0 + myEnum 

तो, यह काम करना चाहिए:

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

यह काम नहीं करेगा जब ' myEnum' सामान्य प्रकार पैरामीटर प्रकार का है, क्योंकि कंपाइलर यह नहीं जानता कि यह वास्तव में एक enum है, और इसलिए ऑपरेटर टाइप नहीं करेगा '+ ' –

+1

यह' विकल्प सख्त ऑन 'के साथ काम नहीं करता है। – mbomb007

0

'जॉन स्कीट' के लिए धन्यवाद। लेकिन उसका कोड मेरे एक्सेल-2016 में काम नहीं करता है। Minwhile अगले कोड ठीक काम करता है:

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 
संबंधित मुद्दे