2012-01-23 9 views
27

Aparece esta advertencia en response.GetResponseStream() ¿Cómo debo manejar esto?Resharper: posible asignación nula a la entidad marcada con el atributo 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; 
    } 
} 

Para mayor claridad sobre la base de algunas respuestas malinterpretar:

Esta línea es no donde está ocurriendo la advertencia:

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

Esta línea es donde está ocurriendo el aviso :

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

¿Por qué no simplemente deja que Resharper lo arregle por usted? –

+0

** Ignore ** esta vez – gdoron

+7

@Uwe Resharper no sabe cómo "arreglarlo" – katit

Respuesta

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

Sospecho que el parámetro del constructor StreamReader tiene un atributo notnull. Intente lo siguiente:

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

Trate acortando su código y envolver los recursos disponibles en using declaraciones:

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

o incluso más lejos:

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

No sé 'C#' mucho, pero 'usar (var reader = new StreamReader (response.GetResponseStream()))' no recibe la misma advertencia de resharper? –

1

Si el objeto response es de tipo HttpWebRequest, a continuación, la respuesta siempre será de tipo HttpWebResponse . Si no es así, entonces nunca lo será.

O está probando esto en el lugar equivocado (por qué llamar al .GetResponse() si se le puede pasar otra clase derivada por WebRequest solo para descartar los resultados) o prueba innecesaria sin ningún efecto.

Supongo que resharper está preocupado por eso, a pesar de la prueba de nulo debajo. Me gustaría ir, ya sea para un reparto directo:

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

O bien, teniendo en cuenta que no están usando algún miembro de HttpWebResponse que no se derivan de WebResponse, sin fundido en absoluto:

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