Подтвердить что ты не робот

Resharper: Возможное присвоение null сущности, помеченной атрибутом notnull

Я получаю это предупреждение на 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());
4b9b3361

Ответ 1

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

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

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

Ответ 2

Попробуйте сократить код и обернуть одноразовые ресурсы в операторах 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/")
}

Ответ 3

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

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

Я предполагаю, что resharper беспокоится об этом, несмотря на то, что тест ниже нуля. Я бы пошел для прямого трансляции:

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();