Kimse ile ExceptionDispatchInfo.Capture( ex ).Throw()
ova arasındaki farkı açıklamadı throw
, işte burada.
Yakalanan bir istisnayı yeniden anlatmanın tam yolu kullanmaktır ExceptionDispatchInfo.Capture( ex ).Throw()
(yalnızca .Net 4.5'ten edinilebilir).
Aşağıda bunu test etmek için gerekli durumlar vardır:
1.
void CallingMethod()
{
//try
{
throw new Exception( "TEST" );
}
//catch
{
// throw;
}
}
2.
void CallingMethod()
{
try
{
throw new Exception( "TEST" );
}
catch( Exception ex )
{
ExceptionDispatchInfo.Capture( ex ).Throw();
throw; // So the compiler doesn't complain about methods which don't either return or throw.
}
}
3.
void CallingMethod()
{
try
{
throw new Exception( "TEST" );
}
catch
{
throw;
}
}
4.
void CallingMethod()
{
try
{
throw new Exception( "TEST" );
}
catch( Exception ex )
{
throw new Exception( "RETHROW", ex );
}
}
Durum 1 ve durum 2, CallingMethod
yöntemin kaynak kodu satır numarasının satırın satır numarası olduğu bir yığın izlemesi verecektir throw new Exception( "TEST" )
.
Ancak, 3. durum size CallingMethod
yöntemin kaynak kodu satır numarasının throw
çağrının hat numarası olduğu bir yığın izlemesi verecektir . Bu, throw new Exception( "TEST" )
çizgi diğer işlemlerle çevriliyse, istisnanın hangi satır numarasına atıldığına dair hiçbir fikriniz olmadığı anlamına gelir .
Durum 4, durum 2 ile benzerdir, çünkü orijinal istisnanın satır numarası korunur, ancak orijinal istisnanın türünü değiştirdiği için gerçek bir tekrarlama değildir.