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

时间:2008-12-03 00:45:35

标签: c# exception

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

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

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

12 个答案:

答案 0 :(得分:70)

try
{
  throw new DivideByZeroException();
}
catch (DivideByZeroException ex)
{
  LogHelper.Error("TEST EXCEPTION", ex);
}

答案 1 :(得分:27)

简短回答:

throw new Exception("Test Exception");

你需要

using System;

答案 2 :(得分: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
 }
你班上的

 try
 {  
      throw new TestException();
 }
 catch( TestException eX)
 {  
    LogHelper.Error("TEST EXCEPTION", eX);
 }

答案 3 :(得分:3)

抛出异常;

不是吗?

我发现的例子是

        if (args.Length == 0)
        {
            throw new ArgumentException("A start-up parameter is required.");
        }

答案 4 :(得分:3)

所以,让我按照你的方式继续做下去。你不想测试抛出DivideByZeroException时会发生什么;你想测试实际发生除以零时会发生什么。

如果您没有发现差异,请考虑:您确定要何时检查NullRefernceException以及何时查看ArgumentNullException

答案 5 :(得分:2)

感谢您的反馈。我已经将GalacticCowboy的答案标记为正确,因为它显然是基于问题表达方式的正确答案。

对于那些认为“这个问题需要更多”的人来说,你是对的。本质上,我一直在寻找一种提升/导致/模拟异常的最佳方法。正如James Curran所说,这是异常的发生,而不是我所追求的抛出异常。强制DivideByZeroException是我的默认策略,虽然我认为可能有另一种方式或甚至更好的例外强制。

投掷和“提升”异常之间没有什么区别。大多数答案至少似乎都是这种观点。

再次感谢您的反馈意见,如果问题含糊不清,请致谢。

答案 6 :(得分:2)

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

            Response.Write(ex.Message);
        }

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

答案 7 :(得分:1)

throw new DivideByZeroException("some message");

或者我错过了什么?

答案 8 :(得分:1)

如果您只是测试LogHelper的Error方法,为什么甚至抛出异常?你只需要一个单行:

LogHelper.Error("TEST EXCEPTION", new Exception("This is a test exception"));

答案 9 :(得分:0)

出于测试目的,您可能想要创建一个特定的类(可能是TestFailedException?)并抛出它而不是劫持另一个异常类型。

答案 10 :(得分:0)

System.Diagnostics.Debug.Assert(condition);

给你一个替代方案吗?

也许然后使用

catch (AssertionException) { }

记录测试失败。

另请参阅C# - What does the Assert() method do? Is it still useful?http://en.csharp-online.net/Assert

答案 11 :(得分:0)

public class CustomException: Exception
{
     public CustomException(string message)
        : base(message) { }

}

// if(something == anything) { throw new CustomException(" custom text message"); }

您可以尝试