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());
Ответы
Ответ 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();