2013-10-25 69 views
1

如果list.Find()返回null.code返回異常。有沒有更好的方法來做到這一點。這是參考我以前的文章。如果list.Find()返回null.code返回異常

鏈接:Linq query returning null when trying to pass a column value from list object

ProcessName = Process().Find(x => x.ProcessID == p.ProcessID).ProcessName ?? String.Empty; 
+0

我的解決方案解決了您的問題嗎? – gleng

+0

不,因爲它在查詢語句中,所以它不適合我。完整的問題在我的問題中提到的鏈接。 – neo

+0

對不起,我給了錯誤的鏈接.......... !!!我已經更新了它。 – neo

回答

1

這是因爲你試圖訪問.ProcessName時.Find()不會有什麼回報:

試試這個:

var matchingProcess = Process().Find(x => x.ProcessID == p.ProcessID); 

ProcessName = matchingProcess ? matchingProcess.ProcessName : string.Empty; 
2

合併Find的結果。如果Find返回null(即沒有找到您的ProcessID),​​那麼您將使用單個字符串屬性ProcessName將null合併爲匿名類型的對象。然後,您的Process對象或使用匿名類型的對象都將具有ProcessName屬性,並且您可以在原始問題的LINQ選擇中使用它。

ProcessName = (Process().Find(x => x.ProcessID == p.ProcessID) ?? new { ProcessName = "<unknown>" }).ProcessName;