I'm interfacing with a .NET API in IronPython. The API is returning an object of the wrong type (some kind of generic object). I suspect that the problem is not showing up in their C# code because the type declaration when the object is constructed is forcing the returned object to the correct type. Is it possible to typecast an .NET object in IronPython? I think this would do the trick.
-
Could you elaborate a bit more? What do you mean by wrong type? – Rohit Sep 17 '09 at 16:41
-
It appears that IronPython always populates an object's members according to its "real" type (since it uses reflection to determine that type). Can you give us an example where this doesn't stand? – ivan_pozdeev Apr 18 '14 at 07:23
4 Answers
To force a conversion you can do:
import clr
convertedObject = clr.Convert(someObject, someType)
This will search for and run implicit/explicit conversions if one exists.
Note: available since IronPython 2.6.

- 33,702
- 16
- 105
- 146

- 6,478
- 20
- 25
-
3I couldn't get this to work. I couldn't find a "Convert" method in my IronPython clr. – Phil Smyth Sep 17 '09 at 21:35
-
`Convert` invokes an explicit/implicit conversion method if there is one; if there isn't, it returns the object unchanged. It can't e.g. cast an object to its parent type. – ivan_pozdeev Jul 09 '13 at 11:01
-
If I try to use this to cast an UInt32 to an Int16 I get an OverflowException. Is there a way to do this that works like an explicit var y = (short)x; cast? – marcob Nov 19 '13 at 09:40
If you need to cast numeric value to an enum
use the following, because the code above does not work for enums, but only for reference types:
Enum.ToObject(CustomEnumType, value)

- 654
- 1
- 11
- 23
I had a similar problem on a project a few months ago. This was my fix:
import clr
clr.GetPythonType(x)
x
can be a .NET type or a type that is in a dll file that you have imported using clr
.
I am not a C# programmer, but I have been told by C# programmer colleagues that this code in C# would be:
typeof(x)
Hope this helps

- 110,290
- 27
- 149
- 241
clr.Convert doesnt exist in IronPython 2.0 . This is not a solution to typecast a .NET object in IronPython?, but it's a workaround to convert the data if you really need it to use it from IronPython
Create a class like this in VB.NET and compile it into a DLL
Imports Microsoft.VisualBasic
Public Class MyConvert
Shared Function converttype(ByVal value As String) As Integer
Return CInt(value)
End Function
End Class
Then in IronPython you do
clr.AddReference('MyConvert')
from MyConvert import converttype
converted_value = converttype("2.0")

- 4,821
- 12
- 52
- 82