2010-04-09 8 views
1
string mvi = Moneys.GetValue(8) as string; 
if (mvi == null) 
    // I am getting exception Here if its null? 
    money.Currency= Convert.ToDecimal(""); 
else 
    // Currency is Decimal 
    money.Currency= Convert.ToDecimal(mvi); 
// I am getting exception Here if its null? 
money.Currency= Convert.ToDecimal(""); 

Quelqu'un peut-il me dire comment faire cela?comment faire cette conversion?

+0

Juste pour clarifier, voulez-vous que nul et vide soient comptés comme zéro alors que le charabia lève une exception? –

+0

Je vais prendre cela comme un oui. –

Répondre

1

Voilà ma version de la réponse de Anthony Pegram:

string mvi = Moneys.GetValue(8) as string; 
money.Currency = 0M; 
if (!String.IsNullOrEmpty(mvi)) 
    if (!Decimal.TryParse(mvi, out money.Currency)) 
    throw new FormatException("mvi"); 

Dans l'ensemble, il semble un peu comme celui Alex fait, seulement il traite vide comme zéro et montre plus-traitement des erreurs.

4

La chaîne vide n'est pas convertible en décimal. Vous pouvez effectuer une vérification comme celui-ci

if (string.IsNullOrEmpty(mvi)) 
{ 
    money.Currency = 0M; 
} 
else 
{ 
    decimal temp = 0M; 
    if (decimal.TryParse(mvi, out temp)) 
    { 
     money.Currency = temp; 
    } 
    else 
    { 
     // you have an invalid input, handle 
    } 
} 
+0

C'est correct mais un peu long. J'ai rassemblé une version plus compacte comme réponse séparée. –

1

Vous pouvez utiliser TryParse au lieu de Convert.ToDecimal():

decimal theValue; 
string mvi = Moneys.GetValue(8) as string; 
Decimal.TryParse(mvi, out theValue); 

Vous pouvez également utiliser l'opérateur coallescing null pour gérer nulls preemtively:

var theValue = Convert.ToDecimal(mvi ?? "0"); 

Dans les deux cas, cependant, vous devez décider quoi faire si la valeur qui arrive n'est pas une décimale valide.

+0

Je pense qu'il veut réellement à la fois vide et nul compte comme zéro. –

+0

Le deuxième exemple compte null comme zéro, mais échoue sur vide. Le premier compte à la fois vide et nul comme zéro, mais compte aussi le charabia comme zéro. –