相关疑难解决方法(0)

一次捕获多个异常?

不鼓励简单地抓住System.Exception.相反,只应捕获"已知"异常.

现在,这有时会导致不必要的重复代码,例如:

try
{
    WebId = new Guid(queryString["web"]);
}
catch (FormatException)
{
    WebId = Guid.Empty;
}
catch (OverflowException)
{
    WebId = Guid.Empty;
}
Run Code Online (Sandbox Code Playgroud)

我想知道:有没有办法捕获两个异常并且只WebId = Guid.Empty调用一次呼叫?

给出的例子相当简单,因为它只是一个GUID.但是想象一下你多次修改一个对象的代码,如果其中一个操作以预期的方式失败,你想要"重置"它object.但是,如果出现意外异常,我仍然希望将其提高.

.net c# exception-handling exception

2015
推荐指数
24
解决办法
52万
查看次数

试着抓.以相同的方式处理多个异常(或通过降低)

这里发布一个非常相似的问题.我正在扩大这个问题.假设你想要捕获多种类型的异常,但想以同样的方式处理它,有没有办法做一些像switch case这样的事情?

switch (case)
{
  case 1:
  case 2:

  DoSomething();
  break;
  case 3:
  DoSomethingElse()
  break;

}
Run Code Online (Sandbox Code Playgroud)

是否可以以相同的方式处理少数例外.就像是

try
{
}
catch (CustomException ce)
catch (AnotherCustomException ce)
{
  //basically do the same thing for these 2 kinds of exception
  LogException();
}
catch (SomeOtherException ex)
{
 //Do Something else
}
Run Code Online (Sandbox Code Playgroud)

c# error-handling exception-handling exception

23
推荐指数
3
解决办法
3万
查看次数

你可以在每个区块中捕获多种类型的异常吗?

这个问题接近我想做的事情,但并不完全存在.

有没有办法简化以下代码?

private bool ValidDirectory(string directory)
{
    if (!Directory.Exists(directory))
    {
        if (MessageBox.Show(directory + " does not exist. Do you wish to create it?", this.Text) 
            == DialogResult.OK)
        {
            try
            {
                Directory.CreateDirectory(directory);
                return true;
            }
            catch (IOException ex)
            {
                lblBpsError.Text = ex.Message;
            }
            catch (UnauthorizedAccessException ex)
            {
                lblBpsError.Text = ex.Message;
            }
            catch (PathTooLongException ex)
            {
                lblBpsError.Text = ex.Message;
            }
            catch (DirectoryNotFoundException ex)
            {
                lblBpsError.Text = ex.Message;
            }
            catch (NotSupportedException ex)
            {
                lblBpsError.Text = ex.Message;
            }
        }
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

这似乎是浪费,如果我以后想要改变向用户报告错误的方式,或者我想记录这些错误,或者其他什么,那么我必须更改5个不同的catch块.我错过了一些东西,还是公然反对代码重用? …

c# try-catch

15
推荐指数
2
解决办法
7434
查看次数

使用完全相同的代码合并catch块?

我想合并以下代码中的catch块,以实现代码重用:

try
{
    DoSomeInputOutput();
}
catch (InvalidOperationException ex)
{
    HandleKnownException1(ex);
}
catch (InvalidDataException ex)
{
    HandleKnownException1(ex);
}
catch (ArgumentNullException ex)
{
    HandleKnownException1(ex);
}
catch (ArgumentOutOfRangeException ex)
{
    HandleKnownException2(ex);
}
catch (ArithmeticException ex)
{
    HandleKnownException2(ex);
}
catch (InvalidCastException ex)
{
    HandleKnownException2(ex);
}
catch (Exception ex)
{
    HandleUnknownException(ex);
}
Run Code Online (Sandbox Code Playgroud)

这样的事情:

try
{
    DoSomeInputOutput();
}
catch (InvalidOperationException ex)
catch (InvalidDataException ex)
catch (ArgumentNullException ex)
{
    HandleKnownException1(ex);
}
catch (ArgumentOutOfRangeException ex)
catch (ArithmeticException ex)
catch (InvalidCastException ex)
{
    HandleKnownException2(ex);
}
catch (Exception ex)
{ …
Run Code Online (Sandbox Code Playgroud)

.net c# code-reuse exception-handling try-catch

8
推荐指数
2
解决办法
2094
查看次数

使用C#和VB.NET代码合并WPF应用程序

我有一个写入的应用程序,C#它需要一些功能VB.NET (更好地说,有效CIL但未提供C#).
所以我有一个可执行文件和一个库文件.

问题:
它必须在一个文件中发布,并且可能不会拆分为不同的程序集!
但是:
这是一个WPF应用程序,ILMerge无法运行.

我能做什么?
是否可以动态生成(高性能)IL?

.net c# vb.net

6
推荐指数
1
解决办法
1069
查看次数