可为空的对象必须具有值错误
本文关键字:错误 对象 | 更新日期: 2023-09-27 18:33:34
我已经在这里多次看到这个问题,但我认为我不理解解决方案,因为它与我的问题有关。
我在这一行得到异常:
return CurrentCompany.ParentCompanyId == null
? (Guid)CurrentCompany.ParentCompanyId
: CurrentCompanyID;
以下是更多代码:
/// Return the current company id, unless this is a child company id,
/// then return the parent company id.
private Guid MainCompanyID
{
get
{
return CurrentCompany.ParentCompanyId == null
? (Guid)CurrentCompany.ParentCompanyId
: CurrentCompanyID;
}
}
如果需要,我很乐意分享更多,但这是关于堆栈跟踪的范围。
在确认ParentCompanyId
null
后,您正在使用它。
在这种情况下,您希望使用CurrentCompanyID
。
这:
return CurrentCompany.ParentCompanyId == null
? (Guid)CurrentCompany.ParentCompanyId : CurrentCompanyID;
应该是这样的:
return CurrentCompany.ParentCompanyId != null
? (Guid)CurrentCompany.ParentCompanyId : CurrentCompanyID;
注意 ==
现在!=
。 你基本上只是想扭转条件。
由于您的CurrentCompany.ParentCompanyId
可为空,因此您也可以使用如下所示的null-coalescing operator -??
。
private Guid MainCompanyID
{
get
{
return (Guid)(CurrentCompany.ParentCompanyId ?? CurrentCompanyID);
}
}
您正在检查 null 并使用它。应该是!=
private Guid MainCompanyID
{
get
{
return CurrentCompany.ParentCompanyId != null ? (Guid)CurrentCompany.ParentCompanyId : CurrentCompanyID;
}
}
这可以很容易地使用空集合运算符??
重写为以下内容(如果parentId是Guid?,CurrentCompanyID是Guid)
private Guid MainCompanyID
{
get
{
return CurrentCompany.ParentCompanyId ?? CurrentCompanyID;
}
}
您的三元运算符有问题。这一行:
return CurrentCompany.ParentCompanyId == null ? (Guid)CurrentCompany.ParentCompanyId : CurrentCompanyID;
基本上翻译为:
if (CurrentCompany.ParentCompanyId == null)
return (Guid)CurrentCompany.ParentCompanyId
else
return CurrentCompanyID;
所以问题是你试图在这里将 null 转换为 Guid。您需要扭转您的状况:
return CurrentCompany.ParentCompanyId != null ? (Guid)CurrentCompany.ParentCompanyId : CurrentCompanyID;
?运算符最容易缩短为:
booleanValue ? resultIfTrue : resultIfFalse;
其中真和假结果必须属于同一类型。
查看您的代码:
CurrentCompany.ParentCompanyId == null //booleanValue
? (Guid)CurrentCompany.ParentCompanyId //resultIfTrue
: CurrentCompanyID; //resultIfFalse
这意味着,当您已验证 ParentCompanyId 为 null 时,您正在尝试返回它。 我猜你想反其道而行之。 为此,您需要更改布尔表达式以检查是否为 null:
CurrentCompany.ParentCompanyId != null //booleanValue
? (Guid)CurrentCompany.ParentCompanyId //resultIfTrue
: CurrentCompanyID; //resultIfFalse
或者,您可以保持布尔表达式不变并切换返回值的顺序:
CurrentCompany.ParentCompanyId == null //booleanValue
? CurrentCompanyID //resultIfTrue
: (Guid)CurrentCompany.ParentCompanyId;//resultIfFalse
两者都应该正常工作。