Forum: PC-Programmierung C#: Exception Message


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von User (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

die Klasse MyExceptionMessage soll die komplette Exception Message 
ausgeben können. Wie müsste ich die Klasse erweitern, damit der String 
msg ausgegeben werden kann. Im Konstruktor kann der string ja nicht 
ausgeben werden.
1
    class MyExeptionMessage
2
    {
3
        public MyExeptionMessage(Exception exception)
4
        {
5
            Exception x = exception.InnerException;
6
            System.Text.StringBuilder msg = new StringBuilder(exception.Message);
7
            while (x != null)
8
            {
9
                msg.AppendFormat("\r\n\r\n{0}", x.Message);
10
                x = x.InnerException;
11
            }
12
            msg.Append("\r\n----Stacktrace----\r\n");
13
            msg.Append(exception.StackTrace);
14
        }
15
    }

von Peter II (Gast)


Bewertung
0 lesenswert
nicht lesenswert
User schrieb:
> Im Konstruktor kann der string ja nicht
> ausgeben werden.

einfach eine Methode GetMsg schreiben und diese beim Catch aufrufen.

von User (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wie meinst du das genau?

von nicht"Gast" (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Moin,

warum eine Klasse, die eine Exception beinhaltet. Üblicherweise Erbt man 
von Exception und überlädt die Ctor. Da kannst du dann in deine Message 
reinschreiben,was du willst. Der Vorteil ist, du kannst mit Throw deine 
Exception werfen und mit Catch auch direkt fangen.



Um deine Frage zu beantworden. Überschreibe ToString().

von User (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Wie würde die mit GetMsg aussehen?

Ich stehe total auf dem Schlauch.

von User (Gast)


Bewertung
0 lesenswert
nicht lesenswert
>>Üblicherweise Erbt man von Exception und überlädt die Ctor.

Wie funktioniert dies?

von nicht"Gast" (Gast)


Bewertung
0 lesenswert
nicht lesenswert
User schrieb:
>>>Üblicherweise Erbt man von Exception und überlädt die Ctor.
>
> Wie funktioniert dies?

Ohje, ein Anfänger :)

So sieht erst mal eine abgeleitete Exception aus.
1
[Serializable]
2
public class meineException: Exception {
3
     public meineException() : base() {}
4
     public meineException(string message) : base(message) {}
5
     public meineException(string message, Exception inner) : base(message, inner) {}
6
     public meineException(SerializationInfo info, StreamingContext context ):base(info, context){}
7
    }

da kannst du dann in deinem Code so was treiben:
1
public static void foo(){
2
     try{
3
          if (!tuwas())
4
              throw new meineException("1 und 1 macht 4");
5
     }
6
     catch(meineException e){
7
          Console.WriteLine(e.ToString()); 
8
     }
9
}

Beachte an der Stelle macht .ToString() genau das, was du da oben in 
deinem Code machst. Es Schmeißt die kompletten Daten einer Exception in 
einen String rein.

von User (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Danke für das Beispiel.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.