2013-06-25 3 views
18

Konstruuję listę ciągów, a następnie chcę rzucić wyjątek i pozwolić UI obsłużyć listę i utworzyć komunikat o błędzie dla użytkownika.Przekaż obiekt (lista <string>) jako część wyjątku

Czy jest jakiś sposób na zrobienie tego?

+3

'niech UI analizowania list' - Dlaczego UI za to odpowiedzialny? –

+2

@HighCore: Myślę, że on po prostu oznacza sformatowanie listy w coś czytelnego dla skrzynki na wiadomości – Cemafor

Odpowiedz

31

Wyjątki zawierają własność Data (która jest słownikiem). Może być używany do przekazywania dodatkowych informacji:

try 
{ 
    // throw new Exception 
} 
catch(Exception e) 
{ 
    // whatever 
    e.Data["SomeData"] = new List<string>(); 
} 
+3

+1 wstyd na mnie - nie wiedziałem o tej nieruchomości –

+1

Dziękuję bardzo! – Pacman

26

Można użyć właściwości Exception.Data przekazać dowolne dane, ale lepszym rozwiązaniem (odkurzacz) byłoby stworzyć własną klasę zwyczaj wyjątek pochodzi od wyjątku i dodać cokolwiek właściwości, potrzebuję tego.

Przykładowy kod:

public class MyException: Exception 
{ 
    public List<String> MyStrings { get; private set; } 

    public MyException(List<String> myStrings) 
    { 
     this.MyStrings = myStrings; 
    } 
} 
+4

Podoba mi się pomysł na podklasę, ponieważ wolę typowanie [er]. – Paul

+2

silne pisanie jest dobre, ale dużą zaletą jest czystszy i bardziej oczywisty kod przy próbie obsługi wyjątku (przy użyciu kaskadowych instrukcji catch) –

+2

Tak, silne [er] pisanie: D – Paul