1

在这种情况下,您将如何纠正处理异常的方法?最初,我希望以以下方式使用 trycatch 会在上传失败时捕获助手类抛出的异常。

我的目标是返回“false”并打开一个带有错误消息的消息框,我将从我的上传尝试中提取 HTML 响应。我试图在不采取不良做法并将 GUI 代码放入我的帮助程序类的情况下做到这一点。

        try
        {
            // returns bool
            successful = UploadHelper.Upload(uploadToPath, File.ReadAllBytes(uploadFromPath), properties);
        }
        catch (Exception ex)
        {
            string error = ex.Message;
        }

助手类:

    public static bool Upload(string webUrl, string documentName, byte[] bytes, Dictionary<string, object> metaInfo, out string result)
    {
        try
        {
            using (WebClient webClient = new WebClient())
            {
                //result is HTML string containing data
                result = Encoding.UTF8.GetString(webClient.UploadData(webUrl + "/_vti_bin/_vti_aut/author.dll", "POST", data.ToArray()));

                // if fails throw exception
                if (result.IndexOf("\n<p>message=successfully") < 0)
                    throw new Exception(result);
            }
        }
        catch (Exception ex)
        {
            result = ex.Message;

            // Upload failed
            return false;
        }
        // Upload succeeded
        return true;
    }

这个稍微相似的问题让我想到我可以通过自定义异常来解决这个问题。然而,阅读创建它们的解释让我对如何使用它们来解决这种情况感到困惑——因为这似乎只会将 Messagebox 代码移动到 Exception 类,这也不是一个好地方。

我相当确定这是我有理由使用自定义异常的情况,因为用户可能能够根据返回的错误消息解决问题。因此,无论如何我都是从上述指南中编写的(为简单起见,代码示例中省略了)。

4

1 回答 1

5

如果您只是要在 UI 中显示异常的消息,而您catch在这里的块只是为了获取消息,那么为什么要在这里捕获它呢?如果处理在 UI 中,则将其捕捉到那里(或更靠近那里),然后在该级别抓取并显示消息。

在这种情况下,您通常会使用异常处理来获取特定异常并从中提取信息以以特定方式报告(将错误消息抽象为下面的 Charleh 评论),或者驱动某种自动重试逻辑。但是,Upload如果上传失败,则称为抛出异常的方法绝对没有错。

于 2012-07-04T14:27:17.880 回答