Resharper: возможное нулевое назначение для объекта, отмеченного атрибутом notnull - PullRequest
32 голосов
/ 24 января 2012

Я получаю это предупреждение на response.GetResponseStream() Как мне справиться с этим?

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

Для ясности, основанной на некоторых ответах, неправильно истолковывающих :

Эта строка не , где появляется предупреждение:

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

В этой строке указано , где происходит предупреждение:

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

Ответы [ 3 ]

32 голосов
/ 24 января 2012
var reader = new StreamReader(response.GetResponseStream());

Я подозреваю, что параметр конструктора StreamReader имеет атрибут notnull.Попробуйте следующее:

var stream = response.GetResponseStream();
if (stream == null)
  // throw an exception
var reader = new StreamReader(stream);
6 голосов
/ 24 января 2012

Попробуйте сократить код и обернуть одноразовые ресурсы в using операторы:

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

или даже дальше:

using (var client = new WebClient())
{
    return client.DownloadString("http://foo.bar.com/")
}
1 голос
/ 24 января 2012

Если объект response имеет тип HttpWebRequest, то ответ всегда будет иметь тип HttpWebResponse. Если это не так, то этого никогда не будет.

Либо вы тестируете это не в том месте (зачем звонить .GetResponse(), если вам может быть передан другой класс, полученный из WebRequest просто для того, чтобы отбросить результаты), или тестируйте ненужные без эффекта.

Полагаю, это беспокоит resharper, несмотря на тест на null ниже. Я бы выбрал прямой акт:

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

Или, учитывая, что вы не используете ни одного члена HttpWebResponse, который не является производным от WebResponse, вообще не приведен:

using (var response = (HttpWebResponse)request.GetResponse())
using(var reader = new StreamReader(response.GetResponseStream()))
  return reader.ReadToEnd();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...