C#如何捕获异常并检查它是否包含字符串?

时间:2008-11-17 00:18:31

标签: c# exception

当用户权限足够时,我收到一个说“拒绝访问”的异常,如何捕获异常并检查“拒绝访问”,这样我就可以向用户显示更友好的“对不起访问”消息?

由于 初学者: - )

8 个答案:

答案 0 :(得分:15)

你真的不想检查消息的字符串,你想要检查消息的类型,这可以通过只捕获你正在检查的异常类型来轻松完成。以下示例将捕获两种不同类型的异常,并根据发生的错误执行不同的操作。 (注意:组成例外的名称)

try {
    ...
} catch (SomeKindOfException ex) {
    MessageBox.Show(ex.Message);
} catch (AccessDeniedException ex) {
    //Do something else
}

答案 1 :(得分:12)

我认为这里最安全的事情(而且令人惊讶的是,没有一个答案表明这一点)是

  • 尽可能抓住特定例外类型。真的试图避免捕获所有异常。
  • 测试包含目标字符串的string.ToLowerInvariant()的异常消息。
  • 重新throw ,如果不是您的期望!
像这样:

try
{
    int result = DoStuff(param);
}
catch (System.IO.IOException ioex)
{
    if (ioex.Message.ToLowerInvariant().Contains("find me"))
    {
        .. do whatever ..
    }
    else
    {
        // no idea what just happened; we gotta crash
        throw;
    }
}

答案 2 :(得分:6)

如果您正在使用try catch块...

try
{
    //error occurs
}
catch (Exception ex)
{
    MessageBox.show(ex.Message);
}

显然,这是非常糟糕的错误处理,但它显示Exception对象包含错误字符串。您可以通过捕获不同的异常类型来缩小对不同异常的处理范围。

Try
{
    //error occurs
}
catch (AccessDeniedException ex)
{
    MessageBox.show(ex.Message);
}
catch (FieldAccessException)
{

}
// etc...

答案 3 :(得分:2)

简单:

try
{
    YourCommandWhichResultsInDeniedAccess();
}
catch (AccessDeniedException)
{
    MessageBox.Show('Access Denied');
}

如果您不知道Exception的类型和/或您想要检查Exception消息,请执行以下操作:

try
{
    YourCommandWhichResultsInDeniedAccess();
}
catch (Exception e)
{
   if (e.Message == 'Access Denied')
   {
       MessageBox.Show('Access Denied')
   }
}

答案 4 :(得分:1)

使用exception filters in C# 6.0更容易:

try
{
    int result = DoStuff(param);
}
catch (IOException ex) 
when (ex.Message.ToLowerInvariant().Contains("find me")) 
{
    //.. do whatever ..
}

答案 5 :(得分:0)

只是从上面进行修改,但使用数据表和数据库以及下拉列表

try {
        drop_grup_head.SelectedValue = ds.Rows[0]["group_head"].ToString();
     }
     catch (Exception exce ) {
        if (exce.Message.ToLowerInvariant().Contains("does not exist in the list")) {
           drop_grup_head.SelectedValue = "0";
        }
     }

答案 6 :(得分:0)

您可以使用条件捕获功能:

try
{
    // code here which throws exception
}
catch (Exception ex) when(ex.Message.Contains("Access Denied"))
{
    MessageBox.Show("Sorry, Access Denied", "This is a polite error message");
}

答案 7 :(得分:-2)

首先 - 应该查看权限问题,而不是单独处理异常。如果抛出“拒绝访问”,则必须存在权限问题或某种锁定。

无论如何,“Message”是一个字符串,您可以使用.Contains方法检查“拒绝访问”。

您无法更改“Message”属性,因为它没有setter,但您可以处理异常并显示礼貌消息。

MessageBox.Show(“抱歉,拒绝访问”);例如。

编辑:如上所述,您应该检查异常的类型。例如AccessDeniedException而不是像“Exception”那样使用泛型。


try
        {
            // code here which throws exception
        }
        catch (Exception ex)
        {
            if (ex.Message.Contains("Access Denied"))
            {
                MessageBox.Show("Sorry, Access Denied", "This is a polite error message");
            }
        }