Throwing exceptions in ASP.NET C#

后端 未结 3 1477
难免孤独
难免孤独 2021-02-04 00:40

Is there a difference between just saying throw; and throw ex; assuming ex is the exception you\'re catching?

相关标签:
3条回答
  • 2021-02-04 00:47

    Here is a simple code snippet that will help illustrate the difference. The difference being that throw ex will reset the stack trace as if the line "throw ex;" were the source of the exception.

    Code:

    using System;
    
    namespace StackOverflowMess
    {
        class Program
        {
            static void TestMethod()
            {
                throw new NotImplementedException();
            }
    
            static void Main(string[] args)
            {
                try
                {
                    //example showing the output of throw ex
                    try
                    {
                        TestMethod();
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
    
                Console.WriteLine();
                Console.WriteLine();
    
                try
                {
                    //example showing the output of throw
                    try
                    {
                        TestMethod();
                    }
                    catch (Exception ex)
                    {
                        throw;
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
    
                Console.ReadLine();
            }
        }
    }
    

    Output (notice the different stack trace):

    System.NotImplementedException: The method or operation is not implemented.
    at StackOverflowMess.Program.Main(String[] args) in Program.cs:line 23

    System.NotImplementedException: The method or operation is not implemented.
    at StackOverflowMess.Program.TestMethod() in Program.cs:line 9
    at StackOverflowMess.Program.Main(String[] args) in Program.cs:line 43

    0 讨论(0)
  • 2021-02-04 01:07

    throw ex; will erase your stacktrace. Don't do this unless you mean to clear the stacktrace. Just use throw;

    0 讨论(0)
  • 2021-02-04 01:10

    You have two options throw; or throw the orginal exceptional as an innerexception of a new exception. Depending on what you need.

    0 讨论(0)
提交回复
热议问题