2014-07-25 2 views
0

Ici, je dois convertir la double précision en nombre entier.La distribution spécifiée n'est pas valide (double précision à int)

Exemple:

obj.DayDifference = !string.IsNullOrEmpty(reader["DateDiff"].ToString()) ? 
       (Int32)reader["DateDiff"] : 0; 

Type de:

  • DayDifference de type int

  • DateDiff de type double precision dans le database table.

Erreur:

cast spécifié n'est pas valide

+1

Quelle est la valeur de 'lecteur [ « DateDiff »]' exactement? Déboguez-nous et dites-nous. –

+0

@ SonerGönül, Le 'DateDiff' consiste en' value' 200. – Meem

Répondre

7

Ce que vous faites est équivalent à:

object x = 32.5; 
int y = (int) x; 

Vous ne pouvez pas faire - Lorsque vous déballez, vous devez désenvoyer le type réel de la valeur .

Vous auriez besoin:

object x = 32.5; 
int y = (int) (double) x; 

Le casting à double unboxes, et la distribution à int convertit le double à un int. Vous pouvez faire la même chose dans votre code:

(Int32)(Double) reader["DateDiff"] : 0; 

Eh bien, modulo quelques petites choses. Le CLR vous permet de Unbox un int à un uint ou à un type ENUM avec un type sous-jacent de int, etc.

+0

Yup! Je l'ai. Merci beaucoup. – Meem

Questions connexes