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