可以为空的对象必须具有值错误

时间:2013-10-01 19:05:31

标签: c# asp.net

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

我在这一行得到例外:

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

如果需要,我很乐意分享更多,但这是关于堆栈跟踪的程度。

5 个答案:

答案 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

要么工作正常。