報錯信息:Nullable object must have a value
翻譯過來就是:可為空的對象必須具有一個值。
看起來有點怪怪的,既然是可空對象為什么必須要有值嗎?下面我們就探討一下吧....
舉個列子,開發過程中可能碰到的一個場景:
有一個類Goods,這個類有很多的屬性,其中有一個Price屬性為可空double類型,我們需要另外一個類GoodsDto 來接收Goods對象並輸出,其中也有一個Price屬性
為double類型。我們可以看到報錯了 double?轉double,因為double?可能是空的,但是double轉double?不會報錯,因為double永遠都有值,而且double?可接受空值
那么怎么處理呢?
GoodsDto dto = new GoodsDto()
{
GoodsName = goods.GoodsName,
GoodsNo = goods.GoodsNo,
Price = goods.Price.Value
};
再次運行下,發現報錯Nullable object must have a value,什么情況呢?
其實稍微分析一下就不難理解了,回到根源還是double?轉double的問題 goods.Price沒值的話,goods.Price.Value就是空值, dto.Price是不可能接受的。
雖然你是可空的,但是當我需要的時候你必須要有值。你可以隱身,但女朋友需要的時候你必須得站出來😁
差點忘了還是單身狗。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
所以加個判斷就好了(為空時給一個默認值)
GoodsDto dto = new GoodsDto() { GoodsName = goods.GoodsName, GoodsNo = goods.GoodsNo, Price = goods.Price == null ? 0 : goods.Price.Value };