2016-04-03 42 views
1

İstisnalar atan bazı işlevlerim var. Onları yakalayan kod bloğunun, atılan istisnaya, ancak ID ve Not gibi daha fazla parametreye göre istisna atmasını istiyorum. bunu nasıl yapabilirim?Varlık istisnası üzerinde kalıtım istisnası

Herhangi biri bana düzgün bir yön verebilirse iyi olur!

Teşekkürler (benim İngilizce için üzgünüm ...) ne istiyorum için

Örnek (Biliyorum ... geçerli bir kod değil)

catch (Exception e) 
{ 
    LogException l=e; 
    l.Note = "note..."; 
    l.ID = 12; 
    throw l; 
} 
+0

Tüm parametreleri içeren bir "State" sınıfı oluşturun. Daha sonra sınıfı istisna işleyicisine aktarın. 'E' değişkeni bir sınıf içerebilir. – jdweng

+0

Neden ilk örnekte 'LogException' atarız? –

+0

@DarrenYoung Kural dışı durum, her zaman istisna atar benim özel durum türü –

cevap

1

Bunu deneyin.

try 
{ 
    //....kaboom 
} 
catch (Exception ex) 
{ 
    var newEX= new Exception("custom message", ex); 
    newEX.Data.Add("any key", "any obj"); 
    throw newEX; 
} 
+1

tam denetiminiz yok Bu, daha iyi bir yanıttır, özel durum yerine özel bir istisna türü oluşturmanız gerekir aslında . Ve yinelemeli olarak tüm iç istisnalardan geçerek, tüm mesajların ve yığın izlerinin güzel bir listesini derleyen, kendi üst düzey işleyicinizi yazmak isteyebilirsiniz. LogException olarak adlandırmamalısınız, istisna adı sorunla ilgili bir şeyler söylemeli, yakaladığınızda ne yapmak isteyebileceğinizle ilgili değil. –

2

Sen (kendi istisna tanımlamak gerekir Bu istisnai özelliklere sahip olan istisna). Temel biçim için, özel bir istisnanın https://msdn.microsoft.com/en-us/library/ms229064(v=vs.100).aspx alması gerektiğini unutmayın (istisna serileştirilebilir hale getirmeniz gerektiğini unutmayın.) Sadece ekstra özelliklerinizi ekleyin.

Özel durum sınıfını (durumunuzda LogException) oluşturduktan sonra, yukarıdaki kod çalışır.