Je suis confronté à un problème que je n'ai jamais rencontré auparavant avec le cast de type.Impossible de convertir un objet de type 'TextmlBatchDeleteDocument' en 'System.String'
Je suis en train de convertir un objet de type TextmlBatchDeleteDocument en System.String. J'ai donc implémenté un opérateur de conversion de type explicite pour gérer cela.
public override string ToString()
{
return string.Format("{0}{1}", this.Collection, this.Name);
}
public static explicit operator string(TextmlBatchDeleteDocument doc)
{
return doc.ToString();
}
Succès, les travaux suivants.
TextmlBatchDeleteDocument doc = new TextmlBatchDeleteDocument("name", "/collection/");
string someString = (string)doc;
Cependant je passe un objet de type List<TextmlBatchDeleteDocument>
à une fonction tierce qui nécessite un objet à mettre en œuvre IList
et elle finira par utiliser les objets dans la liste sous forme de chaînes. C'est là que j'ai des ennuis. Je reçois cette exception chaque fois que j'essaie d'appeler la fonction tierce.
Impossible de convertir l'objet de type 'NWDA_Common.Textml.TextmlBatchDeleteDocument' en type 'System.String'.
Si mes hypothèses sont correctes je passe la fonction d'un objet de type List<TextmlBatchDeleteDocument>
mais il obtient jeté à IList
qui sera ensuite traiter un objet dans ma liste que le type de base System.Object
. J'ai fait un test pour confirmer cette théorie et obtenu la même exception. Si je lance d'abord mon objet de type List<TextmlBatchDeleteDocument>
à System.Object
alors essayez de faire un cast à une chaîne, il va lancer une exception.
TextmlBatchDeleteDocument doc = new TextmlBatchDeleteDocument("name", "/collection/");
object docAsObj = doc;
string someString = (string)docAsObj;
Est-ce qu'il ya quelqu'un qui sait comment résoudre ce problème ou suis-je coincé avec refactoring et de trouver une autre façon?
C'est ce que je m'attendais à entendre, j'espérais juste qu'il y avait un truc à faire. – Wade
+1. Vrai pour tous les opérateurs, conversions incluses. –
Donc serais-je en droit de conclure qu'une fois l'objet converti en System.Object, il perd tous les opérateurs définis dans la classe enfant – Wade