使用switch语句尝试捕获消息

时间:2014-10-08 00:08:54

标签: c# .net try-catch

我试图在我的代码的try catch块中捕获异常。我有一些错误,如找不到错误的密码/文件有特定的消息,我想设置代码,如果发现任何错误。我正在尝试使用switch来捕获消息。

  catch (Exception ex)
            {
  switch (ex.Message.ToString())
                {
                    case "Can't get attributes of file 'p'":
                        Debug.WriteLine("wrong username/password");
                        MainController.Status = "2";
                        break;
                    case "Can't get attributes of file 'p'.":
                        Debug.WriteLine("File is not Available");
                        MainController.Status = "3";
                        break;

                    default:
                        Debug.WriteLine("General FTP Error");
                        MainController.Status = "4";
                        break;
                }
}

我想使用message.contains方法,这样如果我在ex.message中得到错误消息的任何部分,那么它应该调用相关的情况,但我无法弄清楚如何使用ex.message.contains 。任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:4)

我强烈建议您重构代码以使用自定义异常处理程序,而不是依赖于这种“魔术字符串”方法。这种方法不仅难以维护,而且难以测试和调试,因为编译错误不会被编译器捕获。

例如,您可以创建以下异常处理程序:

// Note: can probably be better handled without using exceptions
public class LoginFailedException : Exception
{
    // ...
}

// Is this just a FileNotFound exception?
public class FileNotAvailableException : Exception
{
    // ...
}

public class FtpException : Exception
{
    // ...
}

然后您可以单独捕获每个异常:

try
{
    // ...
}
catch (LoginFailedException)
{
    Debug.WriteLine("wrong username/password");
    MainController.Status = "2";
}
catch (FileNotAvailableException)
{
    Debug.WriteLine("File is not Available");
    MainController.Status = "3";
}
catch (FtpException)
{
    Debug.WriteLine("General FTP Error");
    MainController.Status = "4";
}

此方法是类型安全的,允许您轻松测试和调试方法。它还可以防止打字错误导致数小时的调试困难。

答案 1 :(得分:1)

请勿这样做,而是为每种不同类型的catch使用单独的Exception块。