2014-02-26 27 views
0

從我的研究中我發現我的問題與這裏找到的問題非常接近,但仍然沒有回答我的具體示例問題。遍歷Linq結果給對象引用未設置爲實例

No result in LINQ query gives Object reference not set to an instance of an object in IF ELSE statement

我的LINQ查詢:

var MyResults = (from m in GetData.myTable 
      where m.id.equals(123) 
      select new 
      { 
       value1, 
       value2, 
       value3 
      }).SingleOrDefault(); 

任何值1,值或VALUE3內的三個字段可以爲空。

我檢查MyResults是否爲空(意味着所有值爲空)。

if (MyResults != null) 
{ 
// ok lets pretend in this case the values returned in the MyResults were value1 = 3, value2 = null,  value3=null 

// now I want to check if each of the values and set desired label 
    if (!MyResults.value1.Equals(null)) 
     { 
      label1.text = MyResults.value1; // 3 
     } 
    else 
     { 
      label1.text = "Null Returned"; 
     } 

    if (!myResults.value2.equals(null)) 
     { 
     label2.text = MyResults.value2; 
     } 
    else 
     { 
     label2.text = "value 2 is null"; 
     } 
     // skipping label3 block here 
} 
else // myResults returned null 
{ 
     label1.text = "All values were null"; 
} 

所以Label1的設置就好了,但是當代碼達到

如果(!MyResults.value2.equals(空))

它拋出一個錯誤對象引用未設置到一個對象的實例,參考!MyResults.value2.equals(null)作爲罪魁禍首。那麼我怎樣才能爲值2和3設置標籤,而不會在處理空值時展開呢?

謝謝。希望有人能教我什麼我失蹤。

+0

如果值2爲空,你怎麼能叫上Equals方法?你剛剛試過'if(MyResults.value2!= null)'? –

+0

@ChrisDunaway這已經不是評論的答案了。 –

回答

2

問題:,如果您有任何參數null值,呼籲Equals()它拋出上述異常(不僅Equals(),但是任何函數拋出異常)

解決方法:而不是調用Equals()方法對您懷疑的參數,您需要使用=運算符來檢查null值。

試試這個:

if (myResults.value2 != null) 
    { 
     label2.Text = MyResults.value2; 
    } 

建議1:您可以通過使用條件語句simplifiy上面的代碼(三元運營商?:

試試這個:

if (MyResults != null) 
{ 
    label1.Text = (MyResults.value1 != null) ? MyResults.value1 : "Null Returned"; 
    label2.Text = (MyResults.value2 != null) ? MyResults.value2 : "value 2 is null";  
} 
else // myResults returned null 
{ 
    label1.text = "All values were null"; 
} 

建議2:你也可以用null-coalescing operator??使其更簡單。

從MSDN:

的?運算符稱爲空合併運算符。如果操作數不爲null,則返回 左側的操作數;否則返回右手操作數 。

試試這個:

if (MyResults != null) 
{ 
    label1.Text = MyResults.value1 ?? "Null Returned"; 
    label2.Text = MyResults.value2 ?? "value 2 is null"; 
} 
else 
{ 
    label1.text = "All values were null"; 
} 
+0

謝謝。我想我的印象是它們在功能上相當。感謝您教育我並幫助我解決我的問題。 – DysonGuy

0

也許它是value2爲空,所以調用.equals()給出這個異常?

嘗試使用

if (MyResults.value2 != null) 

什麼的。看看它是否有幫助。

+0

謝謝!正如您在Sudhakar T之前幾秒鐘所建議的那樣,您的建議可以解決問題。欣賞快速回復 – DysonGuy

0

不能對空引用調用Equals()。只要做到

if (MyResults.value2 != null) 

if (!Object.ReferenceEquals(MyResults.value2,null)) 
+0

謝謝!我很樂意與所有偉大的反饋! – DysonGuy

相關問題