3

我已经在这里多次看到这个问题,但我认为我不理解解决方案,因为它与我的问题有关。

我在这条线上遇到了异常:

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;
    }
}

如果需要,我很乐意分享更多信息,但这与堆栈跟踪的范围有关。

4

5 回答 5

4

在您ParentCompanyId确认它是null.
你想CurrentCompanyID在这种情况下使用。

这个:

return CurrentCompany.ParentCompanyId == null 
    ? (Guid)CurrentCompany.ParentCompanyId : CurrentCompanyID;

应该是这样的:

return CurrentCompany.ParentCompanyId != null 
    ? (Guid)CurrentCompany.ParentCompanyId : CurrentCompanyID;

通知==是现在!=。你基本上只是想扭转这种情况。

于 2013-10-01T19:07:34.970 回答
1

您正在检查 null 并使用它。它应该是!=

private Guid MainCompanyID
{
    get
    {
        return CurrentCompany.ParentCompanyId != null ? (Guid)CurrentCompany.ParentCompanyId : CurrentCompanyID;
    }
}

这可以很容易地使用 null collaescing 运算符重写为以下内容??(如果 parentId 是 Guid?并且 CurrentCompanyID 是 Guid)

private Guid MainCompanyID
{
    get
    {
        return CurrentCompany.ParentCompanyId ?? CurrentCompanyID;
    }
}
于 2013-10-01T19:09:12.313 回答
1

由于你CurrentCompany.ParentCompanyId是可空的,你也可以使用null-coalescing operator -??如下。

private Guid MainCompanyID
{
    get
    {
        return (Guid)(CurrentCompany.ParentCompanyId ?? CurrentCompanyID);
    }
}
于 2013-10-01T19:19:41.283 回答
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;
于 2013-10-01T19:09:12.427 回答
0

? _ 运算符最简单的缩写为:

booleanValue ? resultIfTrue : resultIfFalse;

其中真假结果必须是同一类型。

查看您的代码:

CurrentCompany.ParentCompanyId == null         //booleanValue
        ? (Guid)CurrentCompany.ParentCompanyId //resultIfTrue
        : CurrentCompanyID;                    //resultIfFalse

这意味着您在验证 ParentCompanyId 为空时尝试返回它。我猜你想反其道而行之。为此,您需要更改布尔表达式以检查不为空:

CurrentCompany.ParentCompanyId != null         //booleanValue
        ? (Guid)CurrentCompany.ParentCompanyId //resultIfTrue
        : CurrentCompanyID;                    //resultIfFalse

或者,您可以保持布尔表达式不变并切换返回值的顺序:

CurrentCompany.ParentCompanyId == null         //booleanValue
        ? CurrentCompanyID                     //resultIfTrue
        : (Guid)CurrentCompany.ParentCompanyId;//resultIfFalse

两者都应该可以正常工作。

于 2013-10-01T19:21:00.630 回答