Возможное исключение NullreferenceException - PullRequest
4 голосов
/ 04 марта 2010

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

Редактировать: обновленный код.

Ответы [ 3 ]

6 голосов
/ 04 марта 2010

Я предполагаю, что средство проверки не проверяет, что значение строки, передаваемой в индексатор CookieCollection, всегда одинаково. Я представляю, если вы реструктурируете код в:

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

Это может сработать.

3 голосов
/ 04 марта 2010

Вам не нужно слушать каждое предупреждение. Объект Request и объект Cookies никогда не будут нулевыми, поэтому это все, что вам нужно.

var placeCookie = Request.Cookies["place"]; 
if (placeCookie != null)
{
    string placeInformation = placeCookie.Value;
}
0 голосов
/ 04 марта 2010

эээ, не хочешь Request.Cookies["place"].Value != null , прямо сейчас вы будете устанавливать значение placeInformation в null.

...