Facendo un analisi del codice mi ha dato voce CA2200:lanciare e mantenere traccia dello stack non come previsto come descritto da analisi del codice
CA2200 rigenerare per preservare i dettagli dello stack 'func()' genera un errore eccezione catturata e specifica in modo esplicito come argomento. Utilizzare invece "throw" senza argomento per preservare la posizione dello stack in cui inizialmente veniva sollevata l'eccezione.
Ho implementato il suggerimento, ma mi sembra di ottenere la stessa traccia di stack a prescindere.
Ecco il mio codice e uscita di test (lo spazio bianco è destinato a dare i numeri di linea ovvie):
errore previsto alla Line 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();
}
}
}
uscita
in throw_test.Program.Main (String [] args) in c: \ Users \ Richard \ Documents \ Visual Studio 2013 \ Projects \ using_throw_close streaming \ using_throw_closestream \ Program.cs: linea 30
errore previsto alla linea 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();
}
}
}
uscita
a throw_test.Program.Main (String [ ] args) in c: \ Users \ Richard \ Documents \ Visual Studio 2013 \ Projects \ using_throw_closestream \ using_throw_closestream \ Program.cs: riga 30
Lo stesso risultato.
La mia domanda
Con other such questions suggerendo metodi più complessi o espliciti per conservare la traccia dello stack, perché il suggerimento di analisi del codice mi chiedono di fare qualcosa che sembra non funzionare?
Se questo suggerimento è in realtà corretto, cosa sto sbagliando?
si desidera comunque rilevare l'eccezione, non lanciare il messaggio – PatFromCanada
La mia domanda ha più a che fare con il motivo per cui il suggerimento sembra essere sbagliato, piuttosto che sul ripensarci o meno. – rhughes
Penso che il suggerimento sia rilevante solo quando lanci e prendi più metodi. Quindi il metodo A tira, i metodi B prendono e si rilancia. Se B lancia "ex", lo stackstrace inizierà da B, se invece "lancia" inizierà da A. – Mark