Ein paar Leute haben einen sehr wichtigen Punkt übersehen - "throw" und "throw ex" tun zwar dasselbe, aber sie geben Ihnen keine entscheidenden Informationen, nämlich die Zeile, in der die Ausnahme passiert ist.
Betrachten Sie den folgenden Code:
static void Main(string[] args)
{
try
{
TestMe();
}
catch (Exception ex)
{
string ss = ex.ToString();
}
}
static void TestMe()
{
try
{
//here's some code that will generate an exception - line #17
}
catch (Exception ex)
{
//throw new ApplicationException(ex.ToString());
throw ex; // line# 22
}
}
Wenn Sie entweder ein 'throw' oder 'throw ex' tun, erhalten Sie den Stack-Trace, aber die Zeilennummer wird #22 sein, so dass Sie nicht herausfinden können, welche Zeile genau die Ausnahme ausgelöst hat (es sei denn, Sie haben nur 1 oder wenige Codezeilen im Try-Block). Um die erwartete Zeile #17 in Ihrer Ausnahme zu erhalten, müssen Sie eine neue Ausnahme mit der ursprünglichen Ausnahme Stack Trace werfen.