4

Resharper 显示“可能的 System.NullReferenceException”警告。然而,我看不出我怎么能得到一个。

public class PlaceController : PlanningControllerBase
{
    [Authorize]
    public ActionResult StartStop(int id)
    {
        if (Request != null && Request.Cookies != null && Request.Cookies["place"] != null)
        {
            if (Request.Cookies["place"].Value != null)//Possible NullReferenceException?
            {
                string placeInformation = Request.Cookies["place"].Value;//Possible NullReferenceException?
                //...
            }
        }
    }
}

如果我检查所有字段,这怎么能给出 NullReference?使用以下内容不会显示警告:

Request.Cookies[0];//Index instead of name

编辑:更新代码。

4

3 回答 3

6

我假设检查器没有检查传递给 CookieCollection 索引器的字符串的值是否每次都相同。我想如果您将代码重组为:

if (Request != null && Request.Cookies != null) 
{
    var place = Request.Cookies["place"];
    if (place != null && place.Value == null) 
    { 
        string placeInformation = place.Value;
    } 
}

它可能会起作用。

于 2010-03-04T15:33:20.907 回答
4

你不需要听每一个警告。Request对象和Cookies对象永远不会为空,所以这就是你所需要的。

var placeCookie = Request.Cookies["place"]; 
if (placeCookie != null)
{
    string placeInformation = placeCookie.Value;
}
于 2010-03-04T15:47:51.977 回答
0

不是你想要Request.Cookies["place"].Value != null 的,现在你只会将 placeInformation 设置为 null。

于 2010-03-04T15:36:49.113 回答