我已经在这里发过多次这个问题,但我认为我不理解解决方案,因为它与我的问题有关。
我在这一行得到例外:
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;
}
}
如果需要,我很乐意分享更多,但这是关于堆栈跟踪的程度。
答案 0 :(得分:4)
在您确认ParentCompanyId
后,您正在使用null
在这种情况下,您想使用CurrentCompanyID
。
此:
return CurrentCompany.ParentCompanyId == null
? (Guid)CurrentCompany.ParentCompanyId : CurrentCompanyID;
应该是这样的:
return CurrentCompany.ParentCompanyId != null
? (Guid)CurrentCompany.ParentCompanyId : CurrentCompanyID;
注意==
现在是!=
。你基本上只想扭转这种状况。
答案 1 :(得分:1)
您正在检查null并使用它。它应该是!=
private Guid MainCompanyID
{
get
{
return CurrentCompany.ParentCompanyId != null ? (Guid)CurrentCompany.ParentCompanyId : CurrentCompanyID;
}
}
使用null collaescing operator ??
(如果parentId是Guid?而CurrentCompanyID是Guid)可以很容易地重写为以下内容
private Guid MainCompanyID
{
get
{
return CurrentCompany.ParentCompanyId ?? CurrentCompanyID;
}
}
答案 2 :(得分:1)
由于您的CurrentCompany.ParentCompanyId
可以为空,您也可以使用null-coalescing operator -??
,如下所示。
private Guid MainCompanyID
{
get
{
return (Guid)(CurrentCompany.ParentCompanyId ?? CurrentCompanyID);
}
}
答案 3 :(得分:0)
您的三元运营商遇到了问题。这一行:
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;
答案 4 :(得分:0)
? Operator最简单缩写为:
booleanValue ? resultIfTrue : resultIfFalse;
其中,真假结果必须属于同一类型。
查看您的代码:
CurrentCompany.ParentCompanyId == null //booleanValue
? (Guid)CurrentCompany.ParentCompanyId //resultIfTrue
: CurrentCompanyID; //resultIfFalse
这意味着当您已经验证它为null时,您正在尝试返回ParentCompanyId。我猜你想做相反的事情。为此,您需要更改布尔表达式以检查not null:
CurrentCompany.ParentCompanyId != null //booleanValue
? (Guid)CurrentCompany.ParentCompanyId //resultIfTrue
: CurrentCompanyID; //resultIfFalse
或者,您可以保留布尔表达式,并切换返回值的顺序:
CurrentCompany.ParentCompanyId == null //booleanValue
? CurrentCompanyID //resultIfTrue
: (Guid)CurrentCompany.ParentCompanyId;//resultIfFalse
要么工作正常。