2012-01-23 10 views
27

Viene visualizzato questo avviso su response.GetResponseStream() Come devo gestirlo?Resharper: possibile assegnazione nullo all'entità contrassegnata con attributo notnull

// 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; 
    } 
} 

Per chiarezza sulla base di alcune risposte fraintendendo:

questa linea è non in cui l'avviso si sta verificando:

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

Questa linea è in cui l'avviso si sta verificando :

var reader = new StreamReader(response.GetResponseStream()); 
+0

Perché non lasciare che Resharper lo risolva automaticamente? –

+0

** Ignora ** questa volta – gdoron

+7

@Il resharper utente non sa come "risolverlo" – katit

risposta

26
var reader = new StreamReader(response.GetResponseStream()); 

Sospetto che il parametro del costruttore StreamReader abbia un attributo notnull. Prova quanto segue:

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

provare a ridurre il proprio codice e confezionamento risorse disponibili in using dichiarazioni:

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

o ancora più lontano:

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

Non conosco molto 'C#' ma 'userei (var reader = new StreamReader (response.GetResponseStream()))' non ottiene lo stesso avvertimento per il resharper? –

1

Se l'oggetto response è di tipo HttpWebRequest, allora la risposta sarà sempre di tipo HttpWebResponse . Se non lo è, non lo sarà mai.

O si sta verificando questo nel posto sbagliato (perché chiamare .GetResponse() se si può passare un'altra classe derivata da WebRequest solo per buttare via i risultati) o test inutili senza alcun effetto.

Immagino che il resharper sia preoccupante, nonostante il test per null sotto di esso. Mi piacerebbe andare sia per un cast diretta:

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

Oppure, considerando non si utilizza alcun membro di HttpWebResponse che non deriva da WebResponse, nessuna fusione a tutti:

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