在C#中引发异常的最佳方法是什么?

Ben*_*old 45 c# exception

我传统上部署了一组网页,允许手动验证核心应用程序功能.一个例子是LoggerTest.aspx,它生成并记录测试异常.我总是选择使用类似于以下代码段的方法来引发DivideByZeroException:

try
{
   int zero = 0;
   int result = 100 / zero;
}
catch (DivideByZeroException ex)
{
   LogHelper.Error("TEST EXCEPTION", ex);
}
Run Code Online (Sandbox Code Playgroud)

代码工作正常,但我觉得必须有一个更优雅的解决方案.有没有一种在C#中引发异常的最佳方法?

Gal*_*boy 73

try
{
  throw new DivideByZeroException();
}
catch (DivideByZeroException ex)
{
  LogHelper.Error("TEST EXCEPTION", ex);
}
Run Code Online (Sandbox Code Playgroud)

  • 这有点危险.当用户明确提出通常由CLR引发的异常时,CLR的行为会有所不同.有关更多详细信息,请参阅此帖子:http://blogs.msdn.com/jaredpar/archive/2008/10/22/when-can-you-catch-a-stackoverflowexception.aspx (2认同)

Jes*_*kan 29

简短回答:

throw new Exception("Test Exception");
Run Code Online (Sandbox Code Playgroud)

你会需要

using System;
Run Code Online (Sandbox Code Playgroud)


Cha*_*ana 5

为测试目的构建自定义异常?然后,您可以通过异常处理/日志记录过程添加您希望异常随身携带的任何自定义属性...

 [Serializable]
 public class TestException: ApplicationException
 {
     public TestException(string Message, 
                  Exception innerException): base(Message,innerException) {}
     public TestException(string Message) : base(Message) {}
     public TestException() {}

     #region Serializeable Code
     public TestException(SerializationInfo info, 
           StreamingContext context): base(info, context) { }
     #endregion Serializeable Code
 }
Run Code Online (Sandbox Code Playgroud)

在你的班上

 try
 {  
      throw new TestException();
 }
 catch( TestException eX)
 {  
    LogHelper.Error("TEST EXCEPTION", eX);
 }
Run Code Online (Sandbox Code Playgroud)


Sun*_*til 5

        try
        {
            string a="asd";
            int s = Convert.ToInt32(a);
        }
        catch (Exception ex)
        {

            Response.Write(ex.Message);
        }
Run Code Online (Sandbox Code Playgroud)

它将返回异常“输入字符串的格式不正确。”