2016-04-25 14 views
1

Ich bin ein ArgumentException abfangen, von denen ich eine bestimmte Eigenschaft möchte. Wenn ich einen Haltepunkt auf dem Code setzen, wo die ArgumentException gefangen wird, sehe ich, dass es eine ErrorMessage Eigenschaft hat:Zugriff auf Exception-Eigenschaft

enter image description here

Aber versuchen, darauf zuzugreifen gibt dieses Ergebnis:

enter image description here

Was ist denn hier los?

+3

Interessante Frage/erster Screenshot. Ich nehme an, der Debugger fügt einige Details irgendwie hinzu, afaict von [der ArgumentException-Quelle] (http://referencesource.microsoft.com/#mscorlib/system/argumentexception.cs) dort ist keine "ErrorMessage" Eigenschaft auf ihm ... – Jeroen

+3

ist ist es möglich, dass der tatsächliche Typ der Ausnahme eine Art von Klasse ist, die * von 'ArgumentException' erbt? – Jeroen

+1

Es gibt keine ErrorMessage-Eigenschaft in der Klasse _System.ArgumentException_ Sind Sie sicher, dass Sie von dieser exakten Klasse sprechen und nicht von einer abgeleiteten Klasse (auch andere Eigenschaften gehören nicht zu dieser Klasse) – Steve

Antwort

2

Das Problem ist, dass Sie im ersten Screenshot das HttpWebResponse oder ähnliches Objekt anzeigen, während Sie im zweiten Screenshot mit der eigentlichen Ausnahme arbeiten.

Ausnahmen haben eine Message Eigenschaft und keine ErrorMessage. Ändern Sie den zweiten Code in ex.Message und es wird funktionieren.

+0

Wenn ich das tue, wird der Inhalt meiner Fehlermeldung einfach "ArgumentException" sein, während ich den Benutzern nur sagen möchte, dass sie JPG-Bilder hochladen sollen. – ohyeah

+0

Nein, wird es nicht, da "WebServiceException" höchstwahrscheinlich nicht "ArgumentException" erbt. Daher wird Ihr catch-Block überhaupt nicht aufgerufen. Ändern Sie entweder so, dass Sie "WebServiceException" abfangen und "ErrorMessage" verwenden oder "ArgumentException" abfangen und die Eigenschaft "Message" verwenden. – jgauffin

+0

Sie hatten Recht, das habe ich vor einiger Zeit herausgefunden. Entschuldigen Sie! – ohyeah

0

Die Erklärung ist, dass der erste Screenshot NICHT ein Stempel der Ausnahmen Internals ist. Eine ArgumentException hat keine "ArgumentException" Nachricht. Das ist absolut sicher.

Worauf bezieht sich der erste Screenshot? Ich weiß es wirklich nicht, aber es scheint eine Art Service-Kontext zu sein, der bereits mit den relevanten Informationen aktualisiert wurde.

Was Sie wahrscheinlich suchen, ist übrigens die Message Eigenschaft der Ausnahme.