如何正确检查和处理空值或对象

时间:2015-02-12 08:13:14

标签: c# entity-framework c#-4.0

   var userDomain = (from a in this.db.DomainList.ToList()
                            join b in this.db.UserDomain.ToList() on a.DomainId equals b.UserDomainId
                            where b.UserId == new System.Guid(user.ProviderUserKey.ToString())
                            select new
                            {
                                a.DomainId,
                                a.DomainName
                            }).FirstOrDefault();

string userDomainName = (userDomain.DomainName ?? "None").ToString(CultureInfo.InvariantCulture);

我有上面的示例代码。当userDomain为null时,我想将userDomainName varibale设置为" None"否则,如果userDomain不为null,则userDomainName变量应设置为userDomain.DomainName

我试过下面的代码行

 string userDomainName = (userDomain.DomainName ?? "None").ToString(CultureInfo.InvariantCulture);

但这确实有效,因为它会抛出错误

  

对象引用未设置为对象的实例。

如果userDomain为null。

1 个答案:

答案 0 :(得分:3)

是的,如果userDomainnull,那么

userDomain.DomainName

会失败。

在C#6中,您可以使用null条件运算符来解决这个问题:

string userDomainName = userDomain?.DomainName ?? "None";

在C#6之前,你需要:

string userDomainName = 
    (userDomain == null ? null : userDomain.DomainName) ?? "None";

这假设userDomain可能为非空,userDomain.DomainName为空 - 如果不是,则可以使用:

string userDomainName = userDomain == null ? "None" : userDomain.DomainName;

请注意,您不需要ToString部分 - 在字符串上调用ToString(CultureInfo.InvariantCulture)永远不会更改它。