iT邦幫忙

0

GetById可能會取的null資料

  • 分享至 

  • xImage

https://ithelp.ithome.com.tw/upload/images/20230923/201636155PouoPFpCx.png

這段是mvc專案裡的程式碼是在網頁中判斷使用者是進入新增還是修改的if else 判斷,新增的話是沒有id的,所以就會進入if裡面,修改的話是已經帶有id的資料了所以就會進入修改,這段程式碼運作起來沒有問題都正常,但主管認為要在46行的TrainingText後面加上一個問號,因為也要允許沒有id的資料,所以要加一個問號,那也的確加了一個問號後54行的trainingTextService.GetById(id);這段原本底下是綠色波浪就不見了,但雖然有綠色波浪一樣可以使用不會有錯誤,不過主管說加上問號就是要防止這段的GetById(id);取到null的資料,所以GetById後要檢查撈到的資料是空的還是有資料的,如果是空的要給他空的new(),GetById可能會是空的,所以型別應該要允許空值,但....是需要再加甚麼嘛,可是我已經在50行宣告一個新的空的TrainingText並賦值給了trainingTextToEdit,已經處理了空值的清況發生了,主管卻要我賦予空值? 還是他的重點是GetById後要檢查撈到的資料是空的還是有資料的??

powerc iT邦新手 1 級 ‧ 2023-09-25 09:00:43 檢舉
我猜主管的意思是GetById這個方法回傳有可能是null,而不是傳入的id是null。
一個原則:不要相信client給的資料是正常的,以及不要相信client要查詢的資料都有結果(即便一般狀況不會出錯)
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
海綿寶寶
iT邦大神 1 級 ‧ 2023-09-24 09:17:48
最佳解答

從程式來看
trainingTextToEdit 可能是以下三種結果之一
1.new TrainingText() (id==0)
2.traingTextService.GetById (id!=0, 回傳有值)
3.traingTextService.GetById (id!=0, 回傳是 null)

修改前程式只處理情形1,2
「加了一個問號後54行的trainingTextService.GetById(id);這段原本底下是綠色波浪就不見了,但雖然有綠色波浪一樣可以使用不會有錯誤」
不會有錯誤只是因為你沒有測試情形 3 (回傳 null)

要處理情形3, 要修改兩個地方
1.trainingTextToEdit 加問號以允許null值(這點已改)
2.檢查GetById的值, 如果是null就要給他 new TrainingText(), 大概像這樣

trainingTextToEdit = trainingTextService.GetById(id);
if (trainingTextToEdit is null)
{
    trainingTextToEdit = new TrainingText()
}

主管已經講得很清楚明白
你只要聽進去就可以了
主管說加上問號就是要防止這段的GetById(id);取到null的資料,所以GetById後要檢查撈到的資料是空的還是有資料的,如果是空的要給他空的new()

0
wdchiang
iT邦新手 2 級 ‧ 2023-09-23 21:52:17

他的重點是GetById後要檢查撈到的資料是空的還是有資料的??

一般撈資料庫資料,需要加取不到資料的判斷。

我要發表回答

立即登入回答