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

How to properly check and handle null values or objects

   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 为空时,我想将 userDomainName 变量设置为 "None" 否则如果 userDomain 不为空,则 userDomainName 变量应设置为 userDomain.DomainName

我试过下面的代码行

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

但这不起作用,因为它会抛出错误

Object reference not set to an instance of an object.

如果 userDomain 为空。

是的,如果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) 永远不会改变它。