【问题标题】:Possible null assignment to entity marked with notnull attribute可能对标有 notnull 属性的实体赋值
【发布时间】:2013-03-13 13:10:31
【问题描述】:

我在request.GetResponse().GetResponseStream() 收到此警告我应该如何处理?

public void GetUserList(string url)
{
    var request = (HttpWebRequest) WebRequest.Create(url);
    string response;

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

    response = DelimiterStrings.Aggregate(response, (current, delim) => current.Replace(delim, "\n"));

    foreach (var line in response.Split(DelimiterChars))
    {
        MainWindow.UserList.Add(line);
    }
}

Resharper 不知道如何“修复它”

【问题讨论】:

标签: c# .net resharper


【解决方案1】:

如评论所述,首先分配响应流并检查它是否为空,如下所示:

public void GetUserList(string url)
{
  var request = (HttpWebRequest)WebRequest.Create(url);
  var responseStream = request.GetResponse().GetResponseStream();
  if (responseStream != null)
  {
    string response;
    using (var stream = new StreamReader(responseStream))
    {
      response = stream.ReadToEnd();
    }
    response = DelimiterStrings.Aggregate(response, (current, delim) => current.Replace(delim, "\n"));
    foreach (var line in response.Split(DelimiterChars))
    {
      MainWindow.UserList.Add(line);
    }
  }
}

【讨论】:

    【解决方案2】:

    把它分开:

    var sourceStream = request.GetResponse().GetResponseStream();
    Contract.Assume(sourceStream != null); // Let Resharper know it can't be null.
    
    using (var stream = new StreamReader(sourceStream))
    

    这具有记录和检查您的假设的优势!

    【讨论】:

    • 您还假设提问者正在使用代码合同 :)
    • 你的意思是人们没有?天哪! ;) 当然,他们可以改用Trace.Assert(sourceStream != null)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 2015-07-09
    • 2021-05-10
    • 1970-01-01
    • 2017-12-06
    相关资源
    最近更新 更多