2009-09-17 73 views
5

我正在與IronPython中的.NET API接口。 API正在返回錯誤類型的對象(某種通用對象)。我懷疑問題沒有出現在他們的C#代碼中,因爲構造對象時的類型聲明強制返回的對象是正確的類型。是否有可能在IronPython中綁定.NET對象?我認爲這會做到這一點。你可以在IronPython中設計一個.NET對象嗎?

+0

你能詳細說一下嗎?你的錯誤類型是什麼意思? – Rohit 2009-09-17 16:41:08

+0

似乎IronPython總是根據其「真實」類型填充對象的成員(因爲它使用反射來確定該類型)。你能給我們舉一個例子嗎? – 2014-04-18 07:23:11

回答

7

要強制轉換,你可以這樣做:

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

這將搜索和運行隱式/顯式轉換如果存在的話。

注意:自IronPython 2.6起可用。

+1

我無法得到這個工作。我無法在我的IronPython clr中找到「Convert」方法。 – 2009-09-17 21:35:53

+0

如果有轉換方法,'Convert'調用顯式/隱式轉換方法;如果沒有,則返回該對象不變。它不能例如將對象轉換爲其父類型。 – 2013-07-09 11:01:13

+0

如果我嘗試使用這個來將一個UInt32投射到一個Int16,我得到一個OverflowException。有沒有辦法做到這一點,就像一個明確的var y =(short)x;投? – marcob 2013-11-19 09:40:31

0

幾個月前,我在一個項目上遇到了類似的問題。這是我的解決辦法:

import clr 

clr.GetPythonType(x) 

x可以是.NET類型或一個類型,它是在你已經使用clr導入的dll文件。

我不是一個C#程序員,但我一直在用C#程序員的同事告訴記者,這段代碼在C#是:

typeof(x) 

希望這有助於

1

clr.Convert犯規存在的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使用下面的,因爲上面的代碼不會對枚舉工作,但僅限於參考類型:

Enum.ToObject(CustomEnumType, value) 
相關問題