System.Web.Mvc.dll中的“System.NullReferenceException”正在减慢页面加载速度

时间:2016-01-31 20:50:15

标签: c# asp.net asp.net-mvc asp.net-mvc-4 nullreferenceexception

我知道为什么会发生这种情况,我在我的模型中寻找可能存在或不存在的属性,如果存在它会生成一些HTML,如果它不是它生成不同的HTML所以我必须包装它在一个尝试捕获(在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

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

3 个答案:

答案 0 :(得分:2)

在检查FirstOrDefault()之前检查teamviewerID是否为空。如果您使用的是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>
}

答案 1 :(得分:1)

您说您知道该物业可能不存在,那么只需检查该物业吗?

if (item != null)

或者您指的是哪个属性。

答案 2 :(得分:1)

只需检查null:

Computerinfo i = item.tbl_computerinfo.FirstOrDefault();
if(i != null) {
    ...
}
相关问题