检查null后发生System.NullReferenceException

时间:2014-07-18 10:35:35

标签: c# asp.net

我有一个简单的函数来记录显示某些页面时可能发生的错误。 我使用空合并运算符来确保我的string.Format中没有任何null。但是,我仍然在事件日志中看到这些错误:

Error: System.NullReferenceException: Object reference not set to an instance of an object.
   at ASP._core_showad_aspx.LogError(String sType, String sIP, Nullable`1 id, Nullable`1 id2)
void LogError(string sType, string sIP, int? id, int? id2)
{
    string error   =   string.Format("'{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', '{10}', '{11}'", 
    sType??"", sIP??"", id??-1, id2??-1, 
    Request.ServerVariables["HTTP_X_ORIGINAL_URL"]??"", Request.ServerVariables["URL"]??"", Request.ServerVariables["QUERY_STRING"]??"", 
    Request.Path??"", Request.ServerVariables["HTTP_REFERER"]??"", Request.ServerVariables["HTTP_USER_AGENT"]??"", 
    Request.ServerVariables["REMOTE_HOST"]??"", Request.ServerVariables["HTTP_COOKIE"].Substring(0, (Request.ServerVariables["HTTP_COOKIE"].Length>399)?399:Request.ServerVariables["HTTP_COOKIE"].Length)??"");

    WriteLog(error);
}

不应该使用空合并操作符来防止这种情况发生吗?

1 个答案:

答案 0 :(得分:4)

您的Request.ServerVariables["HTTP_COOKIE"]不会检查是否为空。

试试这个:

string httpCookie = string.Empty;
if (Request.ServerVariables["HTTP_COOKIE"] != null)
{
   httpCookie = Request.ServerVariables["HTTP_COOKIE"].Substring(0, (Request.ServerVariables["HTTP_COOKIE"].Length>399)?399:Request.ServerVariables["HTTP_COOKIE"].Length)
}