System.Web.Mvc.dll中的“System.NullReferenceException”正在减慢页面加载速
本文关键字:System 加载 Mvc Web dll 中的 NullReferenceException | 更新日期: 2023-09-27 18:32:43
我知道为什么会发生这种情况,我正在我的模型中寻找一个可能存在也可能不存在的属性,如果它在那里,它会生成一些 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
在输出中。这会大大减慢页面速度。有没有更好的方法来处理不会减慢页面速度的空引用异常?
在检查 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>
}
你说你知道该属性可能不存在,然后只是检查该属性?
if (item != null)
或者您指的是哪个属性。
只需检查空值:
Computerinfo i = item.tbl_computerinfo.FirstOrDefault();
if(i != null) {
...
}