2013-11-22 3 views
7

द्वारा वर्णित एक कोड विश्लेषण करने से उम्मीद नहीं ट्रेस की रक्षा मुझे आइटम CA2200 दिया:फेंक और ढेर के रूप में के रूप में कोड विश्लेषण

CA2200 Rethrow ढेर विवरण संरक्षित करने के लिए 'समारोह()' एक पकड़ा अपवाद rethrows और यह स्पष्ट रूप से निर्दिष्ट करता है एक तर्क के रूप में। इसके बजाय अपवाद के बिना 'फेंक' का प्रयोग करें, ताकि स्टैक स्थान को संरक्षित किया जा सके जहां अपवाद प्रारंभ में उठाया गया था।

मैंने सुझाव लागू किया है, लेकिन मुझे लगता है कि मुझे एक ही स्टैक ट्रेस मिलती है।

यहाँ अपने परीक्षण कोड और आउटपुट है (सफेद स्थान स्पष्ट लाइन नंबर देना होता है): लाइन 30 पर

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace throw_test 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      try 
      { 
       try 
       { 


        // line 22 below 
        throw new Exception(); 
       } 
       catch (Exception ex) // DEFINES AND THROWS 'ex' 
       { 



        // line 30 below 
        throw ex; 
       } 
      } 
      catch (Exception ex) 
      { 
       Console.Write(ex.StackTrace); 
      } 

      Console.Read(); 
     } 
    } 
} 

आउटपुट

अपेक्षित त्रुटि

throw_test.Program.Main (स्ट्रिंग [] args) में c: \ Users \ Richard \ दस्तावेज़ \ Visual Studio 2013 \ Projects \ use_throw_close स्ट्रीम \ using_throw_closestream \ Program.cs: लाइन 30

लाइन पर अपेक्षित त्रुटि 22

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace throw_test 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      try 
      { 
       try 
       { 


        // line 22 below 
        throw new Exception(); 
       } 
       catch (Exception) // NO 'ex' 
       { 



        // line 30 below 
        throw; 
       } 
      } 
      catch (Exception ex) 
      { 
       Console.Write(ex.StackTrace); 
      } 

      Console.Read(); 
     } 
    } 
} 

आउटपुट

throw_test.Program.Main पर

(String [ ] तर्क) सी में: \ उपयोगकर्ता \ रिचर्ड \ दस्तावेज़ \ विजुअल स्टूडियो 2013 \ प्रोजेक्ट्स \ use_throw_closestream \ use_throw_closestream \ Program.cs: लाइन 30

एक ही परिणाम।

मेरा प्रश्न

other such questions अधिक जटिल या स्पष्ट तरीकों का सुझाव दे स्टैक ट्रेस की रक्षा करने के साथ

, क्यों कोड विश्लेषण सुझाव मुझसे पूछते है जो कुछ काम करने के लिए नहीं लगता है करना है?

यदि यह सुझाव वास्तव में सही है, तो मैं गलत क्या कर रहा हूं?

+0

आप अभी भी अपवाद पकड़ना चाहते हैं, बस इसे – PatFromCanada

+1

फेंक न दें मेरा प्रश्न यह है कि सुझाव क्यों गलत है, बजाय पुनर्विचार करना या नहीं। – rhughes

+2

मुझे लगता है कि सुझाव केवल तभी प्रासंगिक होता है जब आप कई तरीकों को फेंकते और पकड़ते हैं। तो विधि ए फेंकता है, विधियों बी पकड़ता है और rethrows। यदि बी 'पूर्व फेंक' करता है तो स्टैकस्ट्रेस बी से शुरू होगा, अगर यह सिर्फ 'फेंक' करता है तो यह ए – Mark

उत्तर

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