c# linq异常: 对象引用未设置为对象的实例。

21 浏览
0 Comments

c# linq异常: 对象引用未设置为对象的实例。

这个问题已经在这里有答案了:

什么是 NullReferenceException,我该如何修复它?

当我运行一个 Linq 查询时,只有在找到项目时才会返回结果;如果没有找到项目,则会抛出“对象引用未设置为对象的实例”异常

我该如何避免抛出此异常?我想返回一个结果,即使是空的。

var id = db.table.Where(a => a.item == passed_item).FirstOrDefault().id;

admin 更改状态以发布 2023年5月22日
0
0 Comments

你可以使用空值条件运算符:

int? id = db.table.Where(a => a.item == passed_item).FirstOrDefault()?.id;

https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/member-access-operators#null-conditional-operators--and-

0
0 Comments

这个方法FirstOrDefault,如果找不到对象,会返回null。因此,如果您尝试读取id的值,将会抛出异常。

避免这种情况的一种方法如下:

// I suppose that the id you want to read is an int.
// If it isn't, please change the code correspondingly. 
int id;
// Try to get the record.
var record = db.table.Where(a => a.item == passed_item)
                     .FirstOrDefault();
// If you find the record you are looking for, then read it's id.
if(record != null) 
{
    id = record.id;
}

更新

另一个选项是按照DavidG在他的评论中提到的方式:

var record = db.Table.FirstOrDefault(a => a.item == passed_item);

接下来的步骤相同。

0