2008-09-17 15 views

उत्तर

41

throw ex; आपके स्टैकट्रैस को मिटा देगा। ऐसा तब तक न करें जब तक आप स्टैकट्रैस को साफ़ न करें। बस throw;

+0

क्या ऐसी कई परिस्थितियां हैं जहां 'फेंक' उपयोगी है? –

+0

मैंने कभी नहीं देखा है, हालांकि हो सकता है। जैसा कि नीचे बताया गया है, मैंने इसे अपर्याप्तता से जोड़ने के बारे में सुना है, लेकिन मैं किसी भी कारण से सोच सकता हूं कि आप अपने स्टैक ट्रेस को नष्ट करना चाहते हैं। – GEOCHET

2

का उपयोग करें आपके पास दो विकल्प फेंक हैं; या एक नए अपवाद के एक अपरिवर्तनीय के रूप में मूल असाधारण फेंक दें। आपको जिस चीज की आवश्यकता है उसके आधार पर।

18

यहां एक साधारण कोड स्निपेट है जो अंतर को दर्शाने में मदद करेगा। अंतर फेंकने वाला अंतर स्टैक ट्रेस को रीसेट करेगा जैसे कि "throw ex;" रेखा अपवाद का स्रोत थी।

कोड:

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

आउटपुट (अलग स्टैक ट्रेस नोटिस):

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

संबंधित मुद्दे