2013-04-18 37 views
6

當我使用以下代碼時,出現對​​象引用錯誤,這可能是因爲沒有匹配「spider」。我的問題是,如何在這些情況下,檢查空值對象引用在使用FirstOrDefault時未設置爲對象錯誤的實例

int fooID = foos.FirstOrDefault(f => f.Bar == "spider").ID; 

我使用不同的條件下,這種相同的情況下從列表中獲取不同的項目,如

int fooID = foos.FirstOrDefault(f => f.Bar == "spider").ID; 
String fooDescription = foos.FirstOrDefault(f => f.Sides == "Cake").Description; 

是否有任何其他方式檢查空值。

+0

同樣值得注意:檢查是否foos'''是或null'沒有(除非你是絕對肯定它不能是'null') – Nolonar

+1

同樣重要的是要知道'null'是不是您從FirstOrDefault返回的唯一值,這取決於您正在使用的類型。 http://msdn.microsoft.com/en-gb/library/xwth0h0d(v=vs.80).aspx – Arran

+0

如果查詢包含0個元素,也有時可以獲得0(默認的int值)。它可以這樣做: 'int fooID = foos.Where(f => f.Bar ==「spider」)。Select(f => f.ID).FirstOrDefault();' –

回答

8

與通常情況下一樣,分配變量並檢查它。

var foo = foos.FirstOrDefault(f => f.Bar == "spider"); 

if (foo != null) 
{ 
    int fooID = foo.ID; 
} 

基於更新後的例子,你需要做這個:

var fooForId = foos.FirstOrDefault(f => f.Bar == "spider"); 
var fooForDescription = foos.FirstOrDefault(f => f.Sides == "Cake"); 

int fooId = fooForId != null ? fooForId.Id : 0; 
string fooDescription = fooForDescription != null ? fooForDescription.Description : null; // or string.Empty or whatever you would want to use if there is no matching description. 
+0

Thanks !! ..但是我使用相同的場景來獲取不同的條目,如 int fooID = foos.FirstOrDefault(f => f.Bar ==「spider」)。字符串fooDescription = foos.FirstOrDefault(f => f.Sides ==「Cake」)。 是否有任何其他方式來檢查空值。 – Mohan

+2

@Mohan然後你應該更新你的例子,所以我們有一半的機會理解你想要達到的目標。 –

1

您可能還需要使用bevaiour DefaultIfEmpty擴展方法,如果沒有匹配的元素。接下來的代碼演示了使用

string[] foos = {"tyto", "bar"}; 

var res = foos.Where(s => s.Length == 2) 
       .DefaultIfEmpty("default") 
       .First() 
       .Length; 

Console.WriteLine (res); //will print the length of default, which is 7 
相關問題