我正在使用下面的Linq语句按ID查找学生姓名。它工作正常。但是,有些情况下没有给定身份证的学生。在这些情况下会抛出错误"对象引用未设置为对象的实例。"
如何有效地解决这个问题?
Dim Name As String = Students.FirstOrDefault(Function(Student) Student.ID = "NO00007").Name
答案 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
相同 - 但提供的出价更低,可读性更高(当然是主观的)