【问题标题】:Can WebRequest.GetResponse().GetResponseStream() return null without WebException?WebRequest.GetResponse().GetResponseStream() 可以在没有 WebException 的情况下返回 null 吗?
【发布时间】:2016-12-01 09:49:49
【问题描述】:

Resharper 给出警告

可能为具有“[NotNull]”属性的实体分配“null”

换行

var strmR = new StreamReader(replyStream);

在以下代码中(详细的异常处理已删除)。

        Stream replyStream;
        string reply;

        var query = _serverBaseUrl + queryText;
        var wreq = WebRequest.Create(query);
        wreq.Timeout = _serverTimeoutLimit;
        try
        {
            replyStream = wreq.GetResponse().GetResponseStream();
            var strmR = new StreamReader(replyStream);
            reply = strmR.ReadLine();
        }
        catch (WebException webex)
        {
            switch (webex.Status)
            {
              /*throw new exceptions*/
            }
        }
        replyStream.Close();
        return reply;

我的想法是我不需要检查 replyStream 是否为 null,因为应该已经抛出了 WebException(或未处理的异常)(然后我会处理并抛出新的自定义异常)如果发生任何错误。

replyStream 是否有可能在没有抛出 WebException 的情况下为空?

【问题讨论】:

    标签: c# .net error-handling resharper


    【解决方案1】:

    replyStream 不能是null。如果GetResponse() 成功,GetResponseStream 总是有一个值。如果出现任何问题,则会抛出 WebExceptiondocumentation of GetResponse() 表示以下内容

    如果抛出 WebException,请使用 Response 和 Status 属性 确定服务器响应的异常。

    因此,您也可以将 catch 子句扩展为句柄 webex.Response

    【讨论】:

      【解决方案2】:

      不,不是,但 ReSharper 不知道这一点。 GetResponseStream() 返回一个 Stream 对象,该对象可能为 null,就像任何其他返回 param 的函数一样,是 Reference 类型,但 StreamReader 明确指出其输入不能为 null。

      【讨论】:

        猜你喜欢
        • 2012-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-07
        • 2022-11-19
        • 1970-01-01
        • 2012-03-21
        相关资源
        最近更新 更多