尝试使用switch语句捕获消息
本文关键字:消息 语句 switch | 更新日期: 2023-09-27 18:25:49
我正试图在代码的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。有人能帮我吗?
我强烈建议重构代码以使用自定义异常处理程序,而不是依赖这种"魔术串"方法。这种方法不仅很难维护,而且很难测试和调试,因为编译器不会发现拼写错误。
例如,您可以创建以下异常处理程序:
// 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";
}
这种方法是类型安全的,允许您轻松地测试和调试方法。它还可以防止打字错误导致数小时的调试困难。
不要这样做,而是为每种不同类型的Exception
使用单独的catch
块。