2011-02-02 28 views

Respuesta

3

Depende de lo que quiere hacer si el decimal? es null, ya que un decimal no puede ser null. Si desea por defecto que a 0, puede utilizar este código (usando el operador coalescente nula):

decimal? nullabledecimal = 12; 

decimal myDecimal = nullabledecimal ?? 0; 
22

Trate de usar el ?? operador:

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

0 es el valor que desee cuando el decimal? es nulo.

10

No necesita convertir un tipo anulable para obtener su valor.

Simplemente tome ventaja de las propiedades HasValue y Value expuestas por Nullable<T>.

Por ejemplo:

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."); 
} 

Alternativamente, se puede utilizar el null coalescing operator en C# 2.0 o posterior como un acceso directo.

-2

Puede usar.

decimal? v = 2;

decimal v2 = Convert.ToDecimal(v);

Si el valor es nulo (v), que se convertirá en 0.

+0

pensé que Convert.ToDecimal() eran representaciones de cadena, no para convertir decimal numerable a decimal. Ver aquí: https://msdn.microsoft.com/en-us/library/9k6z9cdw(v=vs.110).aspx –

79

Hay un montón de opciones ...

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. Yo prefiero 'GetValueOrDefault', ya que no depende de la sintaxis de C# y, como tal, puede ser utilizado en VB.NET también. También es fácilmente ajustable, en caso de que el valor predeterminado del tipo no funcione para usted. – Neolisk

+0

qué pasa con Convert.ToDecimal(); ? ¿Puedo usarlo para la cobertura decimal a decimal? – ManirajSS

+0

@NullReference lo que significaría para hacer la conversión "decimal a decimal"? Hay [Convert.ToDecimal decimal (decimal)] (http://msdn.microsoft.com/en-us/library/8xhfcwt6 (v = vs.110) .aspx), pero que ** ** literalmente sólo devuelve la valor de entrada –

Cuestiones relacionadas