2012-05-09 109 views
6

sdr es mi sqldatareader y quiero comprobar que el valor curPrice que es de tipo decimal es nulo.¿No se puede convertir implícitamente el tipo 'decimal?' a 'decimal'.

inrec.curPrice = sdr.IsDBNull(7) ? (decimal?)null : sdr.GetDecimal(7);

Este es el mensaje de error que estoy recibiendo:

Cannot implicitly convert type 'decimal?' to 'decimal'. An explicit conversion exists (are you missing a cast?)

¿Dónde estoy pasando mal, por favor, que alguien me diga.

Respuesta

10

ya sea convertir a curPrice anulable, o usar la propiedad .Value de tipos anulables.

Si curPrice es una propiedad de una clase, entonces

public decimal? curPrice 
{ 
    get; 
    set; 
} 
19

decimal? indica que se trata de un decimal nullable; debe usar la propiedad Value para obtener el valor real (si existe, determinado a través del HasValue).

Supongo que curPrice es un decimal que no se puede nulos, en cuyo caso también necesita encontrar un valor mejor para devolver que null del lado verdadero de su operador ternario.

+3

Estoy confundido. ¿Tendría usted ejemplos de código para explicar lo que quiere decir ... lo siento, esto es muy nuevo para mí. – user1270384

3

¿Qué hay de la conversión del tipo decmial?-decimal?

Tiene que tener qué valor le gusta inrec.curPrice tener cuando sdr.GetDecmial(7) es nulo.

inrec.curPrice = sdr.GetDecimal(7) ?? 0M; 

Supuse que querría usar 0 si lo que se devolvió fue nulo. Si no, cambie 0M a algún otro valor decimal.

--- Update después de la repetición

¿Qué tal inrec.curPrice = sdr.IsDBNull(7) ? 0M : sdr.GetDecimal(7);?

+0

Cuando hago eso, obtengo este error: Error \t 7 Operador '??' no se puede aplicar a operandos de tipo 'decimal' y 'decimal' – user1270384

+0

Ah .. Acabo de buscar '.GetDecimal()' en MDSN, devuelve un 'decimal' y no' decimal? 'por lo que mi respuesta no tenía sentido. Lo siento por eso. –

4
inrec.curPrice = sdr.GetValueOrDefault(0m) 

Desde el lado izquierdo (Price) no permite null entonces no se puede establecer su valor en algo que podría ser null. Por lo tanto, use .GetValueOrDefault(decimal defaultValue) para devolver un valor predeterminado cuando null.

Cuestiones relacionadas