2008-09-17 6 views

Antwort

41

throw ex; löscht Ihren Stacktrace. Tun Sie das nicht, es sei denn, Sie möchten den Stacktrace löschen. Verwenden Sie einfach throw;

+0

Gibt es viele Umstände, in denen "werfen ex" nützlich ist? –

+0

Ich habe noch nie einen gesehen, obwohl es vielleicht sein könnte. Wie unten erwähnt, habe ich davon gehört, dass ich es an die interne Lösung anschließe, aber ich kann mir keinen Grund vorstellen, warum Sie Ihre Stack-Spur zerstören wollen. – GEOCHET

2

Sie haben zwei Optionen werfen; oder werfen Sie das Orginal Exceptional als eine Ausnahme einer neuen Exception. Je nachdem, was Sie brauchen.

18

Hier ist ein einfaches Code-Snippet, das den Unterschied veranschaulichen soll. Der Unterschied liegt darin, dass der Befehl "ex" den Stack-Trace zurücksetzt, als ob die Zeile "throw ex;" die Quelle der Ausnahme wäre.

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(); 
     } 
    } 
} 

Ausgang (man beachte die verschiedenen 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

Verwandte Themen