2013-07-31 31 views
0

下面的代碼是提高空值異常如何刪除空值例外,在下面的語句

Record rec = (Record)obj.Records.Where(x => x.Id == no).SingleOrDefault(); 
+1

要刪除空值異常發現是空值,並確保它是不是你運行的語句之前...同類很難知道你在問什麼,因爲我們不能告訴你的價值觀是空的... – Chris

+0

它實際上是記錄rec變得空,但我不知道它,beacuase一切都是正確的。 –

+3

對於這個問題陳述和代碼,不應該三個upvotes downvotes沒有任何意圖理解問題或顯示什麼試圖解決它? – CodeCaster

回答

2

好,無論是obj.Recordsnull沒有找到任何記錄。但這也不能實際工作... x.Id == no ...除非當然no是一個變量的地方。

行改成這樣:

Record rec = obj.Records.Where(x => x.Id == no).SingleOrDefault() as Record; 

看到,default的類型將是null。此外,它的真的不可能,雖然我不完全知道你的代碼,即前述的線不能是簡單的:

Record rec = obj.Records.Where(x => x.Id == no).SingleOrDefault(); 

是不是RecordsRecord類型的列表?

+0

爲什麼不能'x.ID == no'工作? – Chris

+0

@Chris _If_「Records」枚舉中有一個「null」條目。 –

+0

@Chris,以及如果'no'是一個變量,我想可以。 :D –

4

有三個潛在的地方,一個NullReferenceException可能發生(編輯:我們現在知道Idint):

  1. obj.Records如果objnull
  2. Records.Where(...)如果Recordsnull
  3. x.Id在你的lambda中如果你有一個null條目可以枚舉(即x在該上下文中是null)。

下面是它不會(假設它編譯):

  1. SingleOrDefault如果多個條目將只拋出一個異常。如果沒有,則返回null作爲參考類型,或者返回值類型的默認值。
  2. (Record)鑄造。由於沒有編譯器錯誤,我假設Record是一個類。如果有值,只有當它是一個無效的轉換(而不是空例外)時纔會引發異常。 A (Record)null對於參考類型是完全有效的。

你應該調試和步找出它導致了異常。

+0

REC對象顯示空例外。 對象引用未設置爲對象的實例 –

+0

@AshishBabu你的意思是(你提供的代碼)行嗎?如果你的意思是'rec'是'null',那麼右手邊拋出一個異常是很正常的。引用類型將具有默認值「null」。如果您正在調試並且在該行引發異常,請檢查「obj」,「obj.Records」和「obj.Records」中的項目,作爲罪魁禍首。如果這個異常的原因是'rec',但是在這行之後,你只需要一個額外的邏輯來處理'rec'變量的'null'值。這很難說。你只向我們展示一行。 –