2013-04-18 38 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 
相关问题