"System.NullReferenceException' in System.Web.Mvc.dll" 正在减慢页面加载速度

"System.NullReferenceException' in System.Web.Mvc.dll" is slowing down page load

我知道为什么会这样,我正在我的模型中寻找一个 属性,它可能存在也可能不存在,如果它存在,它会生成一些 HTML,如果它不存在它生成不同的 HTML 所以我不得不将它包装在一个 try catch 中(它在 foreach 的中间:

@try
{
    if (item.tbl_computerinfo.FirstOrDefault().teamviewerID != null)
    {
        <td class="text-center"><a href="javascript:TeamviewerConnect(@Html.DisplayFor(modelItem => item.tbl_computerinfo.FirstOrDefault().teamviewerID)"><img src="~/Content/images/icons/teamviewericon.png" alt='TeamviewerID' border='0' title='@Html.DisplayFor(modelItem => item.tbl_computerinfo.FirstOrDefault().teamviewerID)'></a></td>
    }
}
catch (Exception)
{
    <td></td>
}

随后这会生成数百个:

Exception thrown: 'System.NullReferenceException' in System.Web.Mvc.dll

在输出中。这会显着降低页面速度。有没有更好的方法来处理不拖慢页面速度的空引用异常?

您说您知道 属性 可能不存在,那么只需检查 属性 即可?

if (item != null)

或者您指的是哪个属性。

在检查 teamviewerID 之前检查 FirstOrDefault() 中的空值。如果您使用的是 C#6,请添加一个 ?在 FirstOrDefault() 之后。空检查比抛出异常快得多。

非 C#6:

var myItem = item.tbl_computerinfo.FirstOrDefault();
if (myItem != null && myItem.teamviewerID != null)
{
    <td class="text-center"><a href="javascript:TeamviewerConnect(@Html.DisplayFor(modelItem => item.tbl_computerinfo.FirstOrDefault().teamviewerID)"><img src="~/Content/images/icons/teamviewericon.png" alt='TeamviewerID' border='0' title='@Html.DisplayFor(modelItem => item.tbl_computerinfo.FirstOrDefault().teamviewerID)'></a></td>
}
else
{
    <td></td>
}

C#6:

if (item.tbl_computerinfo.FirstOrDefault()?.teamviewerID != null)
{
    <td class="text-center"><a href="javascript:TeamviewerConnect(@Html.DisplayFor(modelItem => item.tbl_computerinfo.FirstOrDefault().teamviewerID)"><img src="~/Content/images/icons/teamviewericon.png" alt='TeamviewerID' border='0' title='@Html.DisplayFor(modelItem => item.tbl_computerinfo.FirstOrDefault().teamviewerID)'></a></td>
}
else
{
    <td></td>
}

只需检查是否为空:

Computerinfo i = item.tbl_computerinfo.FirstOrDefault();
if(i != null) {
    ...
}