2011-02-02 20 views

risposta

3

Dipende da cosa si vuole fare se il decimal? è null, dal momento che un decimal non può essere null. Se si vuole di default che a 0, è possibile utilizzare questo codice (utilizzando il nulla coalescenza operatore):

decimal? nullabledecimal = 12; 

decimal myDecimal = nullabledecimal ?? 0; 
22

Provare a utilizzare il ?? dell'operatore:

decimal? value=12; 
decimal value2=value??0; 

0 è il valore che si desidera quando decimal? è nullo.

10

che non è necessario per convertire un tipo nullable per ottenere il suo valore.

È sufficiente sfruttare le proprietà HasValue e Value esposti da Nullable<T>.

Ad esempio:

Decimal? largeValue = 5830.25M; 

if (largeValue.HasValue) 
{ 
    Console.WriteLine("The value of largeNumber is {0:C}.", largeValue.Value); 
} 
else 
{ 
    Console.WriteLine("The value of largeNumber is not defined."); 
} 

In alternativa, è possibile utilizzare il null coalescing operator in C# 2.0 o successiva come scorciatoia.

-2

È possibile utilizzare.

decimal? v = 2;

decimal v2 = Convert.ToDecimal(v);

Se il valore è nullo (v), verrà convertito a 0.

+0

ho pensato che Convert.ToDecimal() era rappresentazioni di stringa, non per convertire decimali nullable in decimali. Vedi qui: https://msdn.microsoft.com/en-us/library/9k6z9cdw(v=vs.110).aspx –

79

C'è un sacco di opzioni ...

decimal? x = ... 

decimal a = (decimal)x; // works; throws if x was null 
decimal b = x ?? 123M; // works; defaults to 123M if x was null 
decimal c = x.Value; // works; throws if x was null 
decimal d = x.GetValueOrDefault(); // works; defaults to 0M if x was null 
decimal e = x.GetValueOrDefault(123M); // works; defaults to 123M if x was null 
object o = x; // this is not the ideal usage! 
decimal f = (decimal)o; // works; throws if x was null; boxes otherwise 
+1

+1. Preferisco 'GetValueOrDefault', perché non dipende dalla sintassi C# e come tale può essere usato anche in VB.NET. È anche facilmente regolabile, nel caso in cui il valore predefinito del tipo non funzioni per te. – Neolisk

+0

cosa dire di Convert.ToDecimal(); ? posso usarlo per copertine da decimale a decimale? – ManirajSS

+0

@NullReference cosa significherebbe fare la conversione da decimale a decimale? Esiste [decimal Convert.ToDecimal (decimal)] (http://msdn.microsoft.com/en-us/library/8xhfcwt6 (v = vs.110) .aspx), ma che ** letteralmente ** restituisce semplicemente valore di input –

Problemi correlati