未找到对象时处理LINQ to Objects

时间:2017-05-09 18:36:43

标签: vb.net linq

我正在使用下面的Linq语句按ID查找学生姓名。它工作正常。但是,有些情况下没有给定身份证的学生。在这些情况下会抛出错误"对象引用未设置为对象的实例。"

如何有效地解决这个问题?

Dim Name As String = Students.FirstOrDefault(Function(Student) Student.ID = "NO00007").Name

2 个答案:

答案 0 :(得分:4)

如果您对Dim Name As String = Students.FirstOrDefault(Function(Student) Student.ID = "NO00007")?.Name 为空,如果没有匹配的学生,则可以使用null条件运算符进行成员访问:

.value()

答案 1 :(得分:2)

通常答案是“它依赖” - 这取决于你将如何使用你将得到的结果

如果你想在集合不包含项目

时获得一些“默认”/空字符串而不是名称
Dim result = Students.Where(Function(student) student.ID = "NO00007").
                      Select(Function(student) student.Name).
                      DefaultIfEmpty(String.Empty).
                      First()

如果你想获得一些“空”对象而不是null

,几乎相同的方法
Dim resultStudent = Students.Where(Function(student) student.ID = "NO00007").
                             DefaultIfEmpty(New Student With { .Name = "empty" }).
                             First()

从绩效角度来看,上述方法与FirstOrDefault相同 - 但提供的出价更低,可读性更高(当然是主观的)