8
votes

Pouvez-vous typecast un objet .NET dans ironpython?

Je suis interface avec une API .NET dans IronPython. L'API renvoie un objet du mauvais type (une sorte d'objet générique). Je soupçonne que le problème ne se présente pas dans leur code C # car la déclaration de type lorsque l'objet est construit est forçant l'objet renvoyé au type correct. Est-il possible de taper un objet .NET dans IronPython? Je pense que cela ferait l'affaire.


2 commentaires

Pourriez-vous élaborer un peu plus? Qu'entendez-vous par mauvais type?


Il semble que Ironpython remplit toujours des membres d'un objet en fonction de son type "réel" (puisqu'il utilise la réflexion pour déterminer ce type). Pouvez-vous nous donner un exemple où cela ne supporte pas?


4 Réponses :


11
votes

Pour forcer une conversion, vous pouvez faire:

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


3 commentaires

Je ne pouvais pas obtenir ça pour travailler. Je n'ai pas pu trouver une méthode "convertie" dans mon CLR IronPython.


convert invoque une méthode de conversion explicite / implicite s'il en existe un; S'il n'y a pas, il renvoie l'objet inchangé. Ça ne peut pas par exemple jeter un objet à son type parent.


Si j'essaie d'utiliser cela pour lancer un UINT32 dans un INT16, je reçois une exception overflowException. Existe-t-il un moyen de faire cela qui fonctionne comme un Var Y = (court) explicite x; jeter?



0
votes

J'ai eu un problème similaire sur un projet il y a quelques mois. C'était mon correctif: xxx

x peut être un type .NET ou un type dans un fichier DLL que vous avez importé à l'aide de CLR .

Je ne suis pas un programmeur C #, mais on m'a dit par C # Programmeur de collègues que ce code en C # serait: xxx

espoir Cela aide


0 commentaires

0
votes

CLR.Convert n'existe pas dans IronPython 2.0. Ce n'est pas une solution pour taper un objet .NET dans IronPython?, Mais c'est une solution de contournement de convertir les données si vous en avez vraiment besoin pour l'utiliser de ironpython

Créer une classe comme celle-ci dans VB .Net et compilez-le dans une DLL xxx

puis dans IronPython, vous faites xxx


0 commentaires

1
votes

Si vous devez lancer une valeur numérique à un Enum code> Utilisez ce qui suit, car le code ci-dessus ne fonctionne pas pour Enums, mais uniquement pour les types de référence:

Enum.ToObject(CustomEnumType, value)


0 commentaires