在我看來,我的很多調試時間花在追查複雜語句中的空引用異常上。例如:爲什麼空引用異常不能指定具有空引用的對象?
For Each game As IHomeGame in _GamesToOpen.GetIterator()
爲什麼,當我得到一個NullReferenceException,我可以得到的堆棧跟蹤的行號,但不是等於null的對象的名稱。換句話說,爲什麼:
Object reference not set to an instance of an object.
,而不是
_GamesToOpen is not set to an instance of an object.
或
Anonymous object returned by _GamesToOpen.GetIterator() is null.
或
game was set to null.
這是嚴格意義上的設計選擇,旨在保護匿名的代碼或有沒有一個比較編譯器設計中的消極原因是不將此信息包含在調試時異常中?
行號也是一個運行時間的事情。調試時編譯包含各種編譯時間事件(類和方法名稱,行號等)爲什麼不包含變量名稱? – 2009-02-23 18:36:03
IL級別實際上存在類和方法和參數名稱。但是生成的IL中變量幾乎沒有了。基本上,沒有具體的方法將異常與特定變量聯繫起來:假設「if(a 2009-02-23 18:44:42
由於上面的評論而被接受。 – 2009-02-23 19:01:11