2012-05-09 15 views
6

sdr è my sqldatareader e voglio verificare che il valore di curPrice che è di tipo decimale sia nullo.Non è possibile convertire implicitamente il tipo "decimale?" a 'decimale'.

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

Questo è il messaggio di errore sto ottenendo:

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

Dove sto andando male, per favore qualcuno mi dica.

risposta

10

o convertire curPrice in null o utilizzare la proprietà .Value di tipi annullabili.

Se curPrice è una proprietà di una classe, allora

public decimal? curPrice 
{ 
    get; 
    set; 
} 
19

decimal? indica che è un decimale nullable; è necessario utilizzare la proprietà Value per ottenere il valore effettivo (se esiste, determinato tramite HasValue).

Suppongo che curPrice sia un decimale non annullabile, nel qual caso è necessario anche calcolare un valore migliore per restituire rispetto a null dal lato vero del proprio operatore ternario.

+3

Sono confuso. Ti capiterà di avere esempi di codice per spiegare cosa intendi ... è dispiaciuto, mi sembra molto nuovo. – user1270384

3

Come sulla conversione del tipo decmial?-decimal?

Devi avere il valore che ti piace inrec.curPrice da avere quando sdr.GetDecmial(7) è nullo.

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

Supponevo che si desiderasse utilizzare 0 se ciò che è stato restituito era nullo. Se non si modifica 0M in qualche altro valore decimale.

--- Aggiornamento dopo la riproduzione

Come su inrec.curPrice = sdr.IsDBNull(7) ? 0M : sdr.GetDecimal(7);?

+0

Quando faccio ciò, viene visualizzato questo errore: Errore \t 7 Operatore '??' non può essere applicato agli operandi di tipo "decimal" e "decimal" – user1270384

+0

Ah .. Ho semplicemente cercato '.GetDecimal()' in MDSN, restituisce un 'decimale' e non' decimale? ', quindi la mia risposta non ha senso. Mi dispiace per quello –

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

Dal momento che il lato sinistro (Price) non consente null allora non si può impostare il suo valore a qualcosa che potrebbe essere null. Pertanto, utilizzare .GetValueOrDefault(decimal defaultValue) per restituire un valore predefinito quando null.