Ce déclenche une exception qui disent la source ne peut pas être casté en destination:C# int coulée de flotter lancer exception (en exécution)
int a = 1;
object b = (object)a;
float c = (float)b; // Exception here
Pourquoi?
Ce déclenche une exception qui disent la source ne peut pas être casté en destination:C# int coulée de flotter lancer exception (en exécution)
int a = 1;
object b = (object)a;
float c = (float)b; // Exception here
Pourquoi?
Vous ne pouvez lancer struct boxed le type exact, vous aurez donc besoin de jeter un int premier:
float c = (float)(int)b;
Toutefois, étant donné qu'il ya une conversion implicite de flotter à partir int, vous pouvez simplement faire:
float c = (int)b;
Pour autant que je sais que c'est parce que vous La boîte « a » comme un entier et après que vous Unbox comme un flotteur et cela ne marchera pas ...
pour obtenir ce droit, vous devriez faire flotter c = (flotteur) (int) b;
Vous ne pouvez pas décompacter (convertir en objet et en retour) une valeur d'un type de données vers un autre. Vous devrez d'abord le ramener à son type d'origine, puis le retirer. Vous pouvez également utiliser les méthodes Convert.To*
, par ex.
Object a = 6;
Double b = Convert.ToDouble(a);
Suivi: http://www.ideone.com/hgeob
Avec a des significations différentes. Dans ce cas, cela signifie "unbox", au lieu de "faire une conversion numérique".
Jetez un oeil à 6 significations ici:
Le problème est que la même syntaxe est réutilisée pour 3 opérations (problème historique de C):
int a = 1; // Ok
object b = (object)a; // Ok. int is struct so we may box it into object
float c = (float)a; // Ok. Conversion from integer to float
float c = (float)b; // Error. object b is not boxed float
UL/Les OL sont drôles avec l'analyseur, vous devez ajouter quelque chose entre eux. Dans ce cas, j'ai utilisé une balise arbitraire HTML (pour invoquer le formatage, mais pas interférer avec le message lui-même). –
Cette question est posée très souvent sur le SO. Voir mon article sur le sujet pour les détails.
http://blogs.msdn.com/b/ericlippert/archive/2009/03/19/representation-and-identity.aspx
double possible de [Pourquoi \ [(int) (objet) 10 m; \] ne lance pas l'exception "Cast spécifié n'est pas valide"?] (http://stackoverflow.com/questions/3953391/why-intobject10m-does-throw-specified-cast-is-not-valid-exception) –