2009-09-17 18 views
5

Estoy interactuando con una API .NET en IronPython. La API está devolviendo un objeto del tipo incorrecto (algún tipo de objeto genérico). Sospecho que el problema no se muestra en su código C# porque la declaración de tipo cuando se construye el objeto está forzando al objeto devuelto al tipo correcto. ¿Es posible encasillar un objeto .NET en IronPython? Creo que esto haría el truco.¿Puedes encasillar un objeto .NET en IronPython?

+0

¿Podría elaborar un poco más? ¿Qué quieres decir con tipo incorrecto? – Rohit

+0

Parece que IronPython siempre rellena los miembros de un objeto de acuerdo con su tipo "real" (ya que usa la reflexión para determinar ese tipo). ¿Puedes darnos un ejemplo en el que esto no funciona? –

Respuesta

7

Para forzar una conversión que puede hacer:

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

Este será buscar y ejecutar las conversiones implícitas/explícitos, si existiera.

Nota: disponible desde IronPython 2.6.

+1

No pude hacer que esto funcione. No pude encontrar un método "Convertir" en mi IronPython clr. –

+0

'Convert' invoca un método de conversión explícito/implícito si lo hay; si no lo hay, devuelve el objeto sin cambios. No puede, p. lanzar un objeto a su tipo principal. –

+0

Si trato de usar esto para convertir un UInt32 a un Int16 obtengo una OverflowException. ¿Hay alguna manera de hacer esto que funcione como una var y = (short) x explícita; ¿emitir? – marcob

0

Tuve un problema similar en un proyecto hace unos meses. Este fue mi solución:

import clr 

clr.GetPythonType(x) 

x puede ser un tipo .NET o un tipo que está en un archivo DLL que ha importado utilizando clr.

No soy un programador de C#, pero me han dicho por C# colegas programador que este código en C# sería:

typeof(x) 

Esperanza esto ayuda

1

clr.Convert no lo existe en IronPython 2.0 . Esto no es una solución a encasillarse en un objeto .NET IronPython ?, pero es una solución para convertir los datos en caso de que realmente lo necesite usarlo de IronPython

Crear una clase como esta en VB.NET y compilar en un DLL

Imports Microsoft.VisualBasic 

    Public Class MyConvert 

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

    End Class 

Luego, en IronPython que hacen

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

Si necesita echar valor numérico a una enum utilizar los siguientes, ya que el código anterior no funciona para las enumeraciones, pero sólo para referencia tipos:

Enum.ToObject(CustomEnumType, value) 
Cuestiones relacionadas