我在以下示例中获得了一个空引用异常:
我有一个包含相关引脚的用户详细信息列表(1 => 0..1)。当我遇到没有关联引脚的UserDetail记录时,我可以理解在访问u.Pin.UserPin
时获得空引用异常。
var t = from UserDetail u in list
select new
{
cell = new object[] { u.UserId.ToString(), u.UserName, u.Password, u.Pin.UserPin }
});
我该如何防止这种情况?
使用像这样的null coalesce运算符将不起作用,因为u.Pin
为null并且我仍然会得到null ref异常:
u.Pin.UserPin ?? string.Empty
答案 0 :(得分:4)
嗯,你可以做到
u.Pin == null ? string.Empty : u.Pin.UserPin
或者,如果您觉得它更具可读性,
list.Select(u =>
{
var pin = string.Empty;
if (u.Pin != null)
{
pin = u.Pin.UserPin;
}
return new
{
Cell = new object[]
{
u.UserId.ToString(),
u.UserName,
u.Password,
pin
}
};
});
答案 1 :(得分:1)
除了检查null
链中的每个引用,可能使用ternary conditional operator之外,您无能为力:
var t = from UserDetail u in list
select new {
cell = new object[] {
u.UserId.ToString(),
u.UserName,
u.Password,
u.Pin != null && u.Pin.UserPin != null ? u.Pin.UserPin : ""
}
};
答案 2 :(得分:0)
尝试这样的事情:
from c in dataContext.Customers
from p in c.Purchases.DefaultIfEmpty( )
select new
{
c.Name,
Descript = p == null ? null : p.Description,
Price = p == null ? (decimal?) null : p.Price
};