如何区分同一个班级的不同异常?

时间:2015-09-18 18:15:48

标签: c# .net ftp ftpwebrequest ftpwebresponse

如果异常是同一个类,如何检查它是登录信息异常还是连接丢失异常?

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;
      }
}

4 个答案:

答案 0 :(得分:1)

使用不同的catch块,如下所示:

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

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

答案 1 :(得分:0)

使用C#的is关键字。

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

供参考,请查看this链接。

答案 2 :(得分:0)

这不是你想要的吗?

http://localhost

答案 3 :(得分:0)

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

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)
        {}
    }
}

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