如何区分同一类的不同例外

本文关键字:一类 何区 | 更新日期: 2023-09-27 18:13:37

如何检查是否为登录信息异常或连接丢失异常,如果异常是来自同一类?

private bool checkFileExists(string absoluteRemoteLocation)
{
      try
      {
            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(absoluteRemoteLocation);
            request.Method = WebRequestMethods.Ftp.UploadFile;
            request.Timeout = timeOut;
            request.Credentials = new NetworkCredential(this.username, this.password);
            request.GetResponse();
            return true;
      }
      catch(Exception e) //i want to check here
      {
            var g = e.ToString();
            return false;
      }
}

如何区分同一类的不同例外

像这样使用不同的catch块:

catch (System.TimeoutException e)
{
    var g = e.ToString();
    return false;
}
catch (System.Net.WebException e)
{
    var g = e.ToString();
    return false;
}

使用c#的is关键字

<!-- language: C# -->
catch (Exception e) {
    if (e is LoginInfoException) // do something
    else if (e is ConnectionLostException) // do something else
}

参考

这不是你想要的吗?

public class Program
{    
    public static void Main(string[] args)
    {
        try
        {           
                throw new ConnectionLostException();
        }
        catch (Exception ex)
        {
            if (ex is LoginInfoException)
            {
                Console.WriteLine ("LoginInfoException");
            }
            else if (ex is ConnectionLostException)
            {
                Console.WriteLine ("ConnectionLostException");  
            }
        }
    }
}
public class LoginInfoException : WebException
{
   public String Message { get; set; }
}
public class ConnectionLostException : WebException
{
   public String Message { get; set; }
}

这是一个简单的过滤器示例,它将捕获不同的异常。我不太了解你正在处理的异常的层次结构,但这将允许你过滤哪些异常在哪里被捕获。

public class CatchExceptions
{
    public void SomeMethod ()
    {
        try
        {
            //some stuff that throws exceptions
        }
        catch (WebException e) if (e is LoginInfoException)
        {}
        catch (WebException e) if (e is ConnectionLostException)
        {}
    }
}

显然,你必须弄清楚你可以用什么来过滤异常,就像这样;看来我上面用的两个例子并不是具体的类型。您可能需要进行一些重组,以找出如何区分这两者。