Resharper:可能为标记为notnull属性的实体赋值

时间:2012-01-23 21:41:22

标签: c# .net resharper

我在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 个答案:

答案 0 :(得分:31)

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

我怀疑StreamReader构造函数的参数具有notnull属性。请尝试以下方法:

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

答案 1 :(得分:6)

尝试缩短代码并在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/")
}

答案 2 :(得分:1)

如果response对象的类型为HttpWebRequest,则响应将始终为HttpWebResponse类型。如果不是,那就永远不会。

你要么在错误的地方进行测试(为什么要调用.GetResponse(),如果你可以传递WebRequest派生的另一个类只是为了扔掉结果),或者测试不必要的那些没有效果。 / p>

我猜resharper担心这一点,尽管在它下方测试了null。我会选择直接演员:

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

或者,考虑到您没有使用HttpWebResponse的{​​{1}}成员,而不是来自WebResponse的成员,根本没有演员:

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