2008-10-30 13 views
14

में कास्ट करना मैं गतिशील रूप से एक मूल्य डालने में सक्षम होना चाहता हूं जहां प्रकार केवल रनटाइम पर जाना जाता है। कुछ इस तरह:वीबीएनईटी

myvalue = CType(value, "String, Integer or Boolean") 

स्ट्रिंग है कि प्रकार मूल्य एक तर्क के रूप पारित हो जाता है शामिल है और यह भी एक डेटाबेस से पढ़ने जाता है, और मूल्य डेटाबेस में स्ट्रिंग के रूप में संग्रहीत किया जाता है।

क्या यह संभव है?

उत्तर

7

निश्चित रूप से, लेकिन myvalue को Object प्रकार के रूप में परिभाषित किया जाना होगा, और आपको यह आवश्यक नहीं है। शायद यह जेनेरिक द्वारा बेहतर सेवा प्रदान की जाती है।

क्या निर्धारित करता है कि किस प्रकार का उपयोग किया जाएगा?

+0

सिर्फ एक स्ट्रिंग प्रकार "स्ट्रिंग", "पूर्णांक" इससे स्पष्ट है, "बूलियन" – Youssef

+0

तो क्या स्ट्रिंग सेट करता है? –

+0

स्ट्रिंग को – Youssef

4

अच्छा, आप कैसे निर्धारित करते हैं कि किस प्रकार की आवश्यकता है? जैसा कि जोएल ने कहा, यह शायद जेनेरिक के लिए एक मामला है। बात यह है: चूंकि आप संकलन समय पर प्रकार को नहीं जानते हैं, इसलिए आप वैसे भी दिए गए मान का इलाज नहीं कर सकते हैं, इसलिए कास्टिंग वास्तव में यहां समझ में नहीं आता है।

2

शायद गतिशील रूप से कुछ कास्टिंग (जो काम नहीं कर रहा है) के बजाय आप प्रतिबिंब का उपयोग कर सकते हैं। विशिष्ट तरीकों या गुणों को प्राप्त करना और इनकार करना काफी आसान है।

Dim t As Type = testObject.GetType() 
Dim prop As PropertyInfo = t.GetProperty("propertyName") 
Dim gmi As MethodInfo = prop.GetGetMethod() 
gmi.Invoke(testObject, Nothing) 

यह सुंदर नहीं है लेकिन आप इनमें से कुछ को एक पंक्ति में कर सकते हैं।

5

यह करने का सबसे छोटा तरीका है। मैंने इसे कई प्रकार के साथ परीक्षण किया है।

Sub DoCast(ByVal something As Object) 

    Dim newSomething = Convert.ChangeType(something, something.GetType()) 

End Sub 
9
Dim bMyValue As Boolean 
Dim iMyValue As Integer 
Dim sMyValue As String 
Dim t As Type = myValue.GetType 


Select Case t.Name 
    Case "String" 
     sMyValue = ctype(myValue, string) 
    Case "Boolean" 
     bMyValue = ctype(myValue, boolean) 
    Case "Integer" 
     iMyValue = ctype(myValue, Integer) 
End Select 

यह एक सा hacky है, लेकिन यह काम करता है।