今天寫了這樣一行代碼:
LcName[0] = (string.IsNullOrEmpty(i.JD1Name.Trim()) ? "空" : i.JD1Name.Trim());
本意是當i.JD1Name(數據庫字段)爲空或者null值得時候返回“空”,如果不是null值就返回這個字段的數據,
可是運行的時候每當i.JD1Name爲空的時候就報錯,說使用的對象沒有實例化。
開始搞暈了,後來仔細一看不禁啞然失笑,,
學過編譯原理的朋友都知道,一個運算表達式,從外層運算到裏層運算入棧,然後再逐層出棧計算,
在上面的表達式中,在棧頂的是Trim()運算,運算數就是i.JD1Name,所以,當i.JD1Name是null值得時候
首先會參與一次運算,系統自然就報錯了,這個時候IsNullOrEmpty()函數根本就沒有起作用。
後來改成這樣就沒有問題了:
LcName[0] = (string.IsNullOrEmpty(i.JD1Name) ? "空" : i.JD1Name.Trim());
哈哈,隨意的習慣害人啊,至少耽誤了我不少時間。
今天特做個筆記,低級錯誤,大俠們別笑哦。