C# 确定异常是否用消息初始化

标签 c# exception constructor try-catch throw

有没有办法在捕获异常时确定它是否是使用非默认消息构造的。

        try
        {
            throw new Exception(message);      // case 1
            //throw new Exception();           // case 2
        }

        catch(Exception exp)
        {
            /* what do I put here such that if the case 2 exception were
               caught it would output exp.ToString() instead of exp.Message? */

            textBox1.Text = exp.Message;  // case 1 handeling

        }

只是为了澄清何时抛出 Exception(message),我希望它输出 exp.Message,当抛出 Exception() 时,我想输出 exp.ToString()。我更愿意在不添加自定义异常的情况下完成此任务。谢谢。

最佳答案

您需要根据默认异常检查消息

catch (Exception e)
{
  bool isDefaultMessage = e.Message == new Exception().Message;
}

更新

异常的不同类型

catch (Exception e)
{
  bool isDefaultMessage = false;
  try
  {
     var x = (Exception) Activator.CreateInstance(e.GetType());
     isDefaultMessage = e.Message == x.Message;
  }
  catch (Exception) {} // cannot create default exception.
}

关于C# 确定异常是否用消息初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32640954/

相关文章:

java - 如何反序列化具有参数化构造函数的对象

c++ - 为什么这个 vector 声明无效?

c# - 数据表列不可访问 C# ASP.NET

ios - 如何在 Swift 中获取堆栈跟踪错误?

java - 在 Java 中抛出自定义异常与内置异常

c++ - 构造函数内的错误 C2512 : no appropriate default constructor available: declaration of a object with arguments!

C#:将子项添加到集合并在同一调用中设置子项的父项

c# - WPF 将按钮绑定(bind)到按下的键

c# - 什么时候 User.Identity.IsAuthenticated 设置为 true

c++ - 在析构函数中捕获异常