2009-09-17 14 views
5

मैं आयरनपीथन में एक .NET API के साथ इंटरफेसिंग कर रहा हूं। एपीआई गलत प्रकार की वस्तु (कुछ प्रकार की जेनेरिक ऑब्जेक्ट) लौटा रही है। मुझे संदेह है कि समस्या उनके सी # कोड में दिखाई नहीं दे रही है क्योंकि जब वस्तु का निर्माण होता है तो प्रकार की घोषणा लौटाई गई वस्तु को सही प्रकार पर मजबूर कर रही है। क्या IronPython में .NET ऑब्जेक्ट टाइप करना संभव है? मुझे लगता है कि यह चाल करेगा।क्या आप IronPython में .NET ऑब्जेक्ट टाइप कर सकते हैं?

+0

क्या आप थोड़ा और विस्तार कर सकते हैं? गलत प्रकार से आपका क्या मतलब है? – Rohit

+0

ऐसा प्रतीत होता है कि आयरनपीथन हमेशा अपने "असली" प्रकार के अनुसार किसी ऑब्जेक्ट के सदस्यों को पॉप्युलेट करता है (क्योंकि यह उस प्रकार को निर्धारित करने के लिए प्रतिबिंब का उपयोग करता है)। क्या आप हमें एक उदाहरण दे सकते हैं जहां यह खड़ा नहीं है? –

उत्तर

7

आप कर सकते हैं एक रूपांतरण के लिए मजबूर करने के लिए:

import clr 
convertedObject = clr.Convert(someObject, someType) 

इस के लिए खोज करेंगे और अंतर्निहित/स्पष्ट रूपांतरण चलाने यदि कोई मौजूद है।

नोट: आयरनपीथन 2.6 के बाद उपलब्ध है।

+1

मैं इसे काम पर नहीं मिला। मुझे अपने IronPython clr में "कनवर्ट" विधि नहीं मिली। –

+0

'कन्वर्ट' एक स्पष्ट/निहित रूपांतरण विधि का आह्वान करता है यदि कोई है; यदि नहीं है, तो यह वस्तु अपरिवर्तित लौटाता है। यह उदास नहीं हो सकता ऑब्जेक्ट को अपने मूल प्रकार पर डालें। –

+0

यदि मैं int16 पर UInt32 डालने के लिए इसका उपयोग करने का प्रयास करता हूं तो मुझे ओवरफ़्लो एक्सेप्शन मिलता है। ऐसा करने का कोई तरीका है जो एक स्पष्ट var y = (लघु) x की तरह काम करता है; डाली? – marcob

0

मुझे कुछ महीने पहले एक परियोजना पर एक ही समस्या थी।

import clr 

clr.GetPythonType(x) 

x एक .NET प्रकार या एक प्रकार है कि आप clr का उपयोग कर आयात किया है एक dll फ़ाइल में है कि हो सकता है: यह मेरा ठीक था।

मैं एक सी # प्रोग्रामर नहीं हूँ, लेकिन मैं सी # प्रोग्रामर सहयोगियों द्वारा बताया गया है कि सी # में इस कोड होगा:

typeof(x) 

आशा इस मदद करता है

1

clr.Convert does not को IronPython 2.0 में मौजूद । यह IronPython में एक .NET ऑब्जेक्ट टाइपकास्ट करने के लिए एक समाधान नहीं है ?, लेकिन यह एक वैकल्पिक हल यदि आप वास्तव में यह से यह उपयोग करने के लिए IronPython

VB.NET में इस तरह एक कक्षा बनाएं और संकलन की जरूरत है डेटा कन्वर्ट करने के लिए है एक DLL

Imports Microsoft.VisualBasic 

    Public Class MyConvert 

     Shared Function converttype(ByVal value As String) As Integer 
      Return CInt(value) 
     End Function 

    End Class 

फिर IronPython में आप

clr.AddReference('MyConvert') 
from MyConvert import converttype   
converted_value = converttype("2.0") 
0

कर आप एक enum के संख्यात्मक मान कास्ट करने के लिए निम्नलिखित का उपयोग की जरूरत है, क्योंकि इसके बाद के संस्करण कोड enums के लिए काम नहीं करता है, लेकिन केवल के लिए में संदर्भ प्रकार:

Enum.ToObject(CustomEnumType, value) 
संबंधित मुद्दे