Erreur: Specified Cast Is Not Valid

Darkneon Messages postés 56 Date d'inscription vendredi 18 mai 2001 Statut Membre Dernière intervention 13 décembre 2005 - 21 sept. 2005 à 17:38
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 22 sept. 2005 à 19:05
Salut,

J'ai un probleme. J'essais de debugger le code de mon collegue mais Visual Studio me lance l'erreur que j'ai mis dans le titre. Le programme compile; c'est en runtime que l'erreur est attrapee.

object oReader;
int ContactId = 0;

... plus tard ...

oResult = oCommand.ExecuteScalar();ContectID oResult null ? 1 : (int)oResult;

L'erreur c'est "(int)oResult". J'ai tester avec Convert.ToInt32(oResult.ToString()) et ca marche! Je ne comprends pas pourquoi le code original lui ne functionne pas?

Quelqu'un a une idee?

Merci d'avance.

Party 'till you drop !!!

5 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
21 sept. 2005 à 18:55
Salut, utilises l'opérateur is ou as, peut être que oResult est de type string ?
0
Darkneon Messages postés 56 Date d'inscription vendredi 18 mai 2001 Statut Membre Dernière intervention 13 décembre 2005
21 sept. 2005 à 20:28
Mini correction, la premiere ligne "object oReader" c'est "object oResult".

OK, j'ai verifie le type de oReader et ca m'a retourne "decimal". Un peu plus de detail, une de valuer de oResult etait 27495.

Darkneon
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
21 sept. 2005 à 22:16
Pour caster un type decimal:

// le type decimal est un réel.
object o = 99.99m; // m sgnifie decimal.


// sans perte de précision.
decimal d = ( decimal )o;


// les nombres après la virgule sont perdus.
int i = Decimal.ToInt32( ( decimal )o );


// ou ça:
int i = ( int )( decimal )o;
0
Darkneon Messages postés 56 Date d'inscription vendredi 18 mai 2001 Statut Membre Dernière intervention 13 décembre 2005
22 sept. 2005 à 04:19
Salut Lutinore,



Je dois avoier que j'ai jamais utiliser une variable de type object
auparavant. Donc la prochaine question pourrait sonner tres debutante.

Dans ma tete, si tu fais object o 99.9m, la variable o n'est elle pas converit en type "decimal"? Donc, decimal d o devrait marcher sans le cast (decimal)?



Peut-etre un meilleur example, si tu fais object text = "du text", est ce que tu peux faire Console.Writline(text)? Ou bien il fait quand meme caster, donc Console.Writeline((string)text) ou meme Console.Writline(text.ToString())?



Je pourrais faire les testes moi meme, mais je suis un peu fatiguer maintenant



Merci!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
22 sept. 2005 à 19:05
Pour la première question, apparemment il n'y a pas de conversion implicite entre le type object et les types de bases, object est un type référence contrairement aux types de bases.

Pour la deuxième question, quand tu appelles la méthode WriteLine( myObject ) ca marche car dans la classe console il y'a une surcharge de WriteLine qui attend un object. Pour ce qui est d'utiliser ToString sur un object ca marche toujours car ToString est une métode virtuelle, càd qu'elle est appellée sur le vrai type de l'object.
0
Rejoignez-nous