2012-05-09 29 views
6

sdr là sqldatareader của tôi và tôi muốn kiểm tra rằng giá trị curPrice có kiểu thập phân là null.Không thể chuyển đổi hoàn toàn loại 'thập phân'? thành 'thập phân'.

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

Đây là thông báo lỗi Tôi nhận:

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

Tôi đang ở đâu đi sai, xin vui lòng một ai đó cho tôi biết.

Trả lời

10

hoặc chuyển đổi curPrice thành không thể sử dụng hoặc sử dụng thuộc tính .Value của các loại có thể vô hiệu hóa.

Nếu curPrice là một tài sản của một lớp thì

public decimal? curPrice 
{ 
    get; 
    set; 
} 
19

decimal? cho biết rằng đó là số nullable số thập phân; bạn phải sử dụng thuộc tính Value để nhận giá trị thực tế (nếu nó tồn tại, được xác định qua HasValue).

Tôi giả định curPrice là số thập phân không thể vô hiệu hóa, trong trường hợp này, bạn cũng cần tìm ra giá trị tốt hơn để trả về null từ phía bên phải của toán tử bậc ba.

+3

Tôi đang bối rối. Bạn sẽ xảy ra để có mẫu mã để giải thích những gì bạn có nghĩa là .. thực sự xin lỗi này là rất mới với tôi. – user1270384

3

Làm thế nào về chuyển đổi loại decmial?-decimal?

Bạn phải có giá trị bạn thích inrec.curPrice để có khi sdr.GetDecmial(7) không có giá trị.

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

Tôi giả định rằng bạn muốn sử dụng 0 nếu những gì được trả về là rỗng. Nếu không thay đổi 0M thành một số giá trị thập phân khác.

--- Cập nhật sau khi phát lại

Làm thế nào về inrec.curPrice = sdr.IsDBNull(7) ? 0M : sdr.GetDecimal(7);?

+0

Khi tôi làm điều đó, tôi nhận được lỗi này: Lỗi \t 7 Toán tử '??' không thể được áp dụng cho các toán hạng kiểu 'thập phân' và 'thập phân' – user1270384

+0

Ah .. Tôi vừa tra cứu '.GetDecimal()' trong MDSN, nó trả về một 'thập phân' và không phải là 'thập phân?' vì vậy câu trả lời của tôi là vô nghĩa. Xin lỗi vì điều đó. –

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

Kể từ bên trái (Price) không cho phép null thì bạn không thể đặt giá trị là cái gì đó có thể là null. Do đó, hãy sử dụng .GetValueOrDefault(decimal defaultValue) để trả lại giá trị mặc định khi null.

Các vấn đề liên quan