1

在以下示例中,我得到一个空引用异常:

我有一个包含相关引脚的用户详细信息列表(1 => 0..1)。当我遇到没有关联 pin 的 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 }
                    });

我怎样才能防止这种情况?

像这样使用空合并运算符将不起作用,因为u.Pin它是空的,我仍然会得到空引用异常:

u.Pin.UserPin ?? string.Empty

4

3 回答 3

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
            }
        };
    });
于 2013-07-10T13:25:40.270 回答
1

除了检查链中的每个引用之外,您无能为力null,可能使用三元条件运算符

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 : ""
            }
        };
于 2013-07-10T13:27:01.120 回答
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
  };
于 2013-07-10T13:39:15.483 回答