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

C#确定是否使用消息初始化异常,c#,exception,constructor,try-catch,throw,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

在捕获异常时,是否有方法确定它是否由非默认消息构造

        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

        }

为了澄清何时抛出异常(消息),我希望它输出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.
}

在上面的示例中,if throw Exception()的exp.Message值读取“抛出了类型为'System.Exception'的异常”。这看起来像
textBox1.Text=isDefaultMessage?e、 ToString():例如消息。我喜欢这种方法。当catch()块获得不同类型的异常,并带有默认消息(如IndexOutfrange或FileNotFound)时,情况如何。使用不同类型的异常更新了答案。当我键入x时,编译器会抱怨。带有“object”的消息不包含“Message”的定义,也没有扩展方法“无法找到消息‘接受类型为‘object’的第一个参数’(是否缺少using指令或程序集引用?)。哦,需要强制转换为异常;请参阅新代码。