web-dev-qa-db-fra.com

Resharper: affectation nulle possible à une entité marquée avec un attribut non nul

Je reçois cet avertissement sur response.GetResponseStream() Comment dois-je gérer cela?

// Get response  
using (var response = request.GetResponse() as HttpWebResponse)
{
    // Get the response stream  
    if (response != null)
    {
        var reader = new StreamReader(response.GetResponseStream());
        var responseString = reader.ReadToEnd();
        return responseString;
    }
}

Par souci de clarté, à partir de réponses erronées :

Cette ligne est pas où l'avertissement se produit: 

using (var response = request.GetResponse() as HttpWebResponse)

Cette ligne est où l'avertissement se produit:

var reader = new StreamReader(response.GetResponseStream());
31
katit
var reader = new StreamReader(response.GetResponseStream());

Je soupçonne que le paramètre du constructeur StreamReader a un attribut notnull. Essayez ce qui suit:

var stream = response.GetResponseStream();
if (stream == null)
  // throw an exception
var reader = new StreamReader(stream);
31
Miserable Variable

Essayez de raccourcir votre code et d'encapsuler les ressources jetables dans des instructions using:

using (var response = request.GetResponse())
using (var reader = new StreamReader(response.GetResponseStream()))
{
    return reader.ReadToEnd();
}

ou même plus loin:

using (var client = new WebClient())
{
    return client.DownloadString("http://foo.bar.com/")
}
6
Darin Dimitrov

Si l'objet response est de type HttpWebRequest, la réponse sera toujours de type HttpWebResponse. Si ce n'est pas le cas, cela ne le sera jamais.

Soit vous testez ceci au mauvais endroit (pourquoi appelez .GetResponse() si vous pourriez recevoir une autre classe dérivée de WebRequest juste pour jeter les résultats) ou test inutile sans effet.

Je suppose que le revendeur s’inquiète de cela, malgré le test de null en dessous. Je choisirais soit une distribution directe:

using (var response = (HttpWebResponse)request.GetResponse())
using(var reader = new StreamReader(response.GetResponseStream()))
  return reader.ReadToEnd();

Ou bien, considérant que vous n'utilisez aucun membre de HttpWebResponse qui ne soit pas dérivé de WebResponse, aucun casting:

using (var response = (HttpWebResponse)request.GetResponse())
using(var reader = new StreamReader(response.GetResponseStream()))
  return reader.ReadToEnd();
1
Jon Hanna