Benutzer mit den meisten Antworten
ArgumentException in String Verkettung mit + Operator wird geschluckt

Frage
-
Der Code
return "0." + new string('#', decimals);
sollte meiner Ansicht nach für decimals == 0 eine ArgumentException werfen. Tut er aber nicht. Das verstehe ich nicht, einzeln ausgewertet wirft
return new string('#', decimals);
eine ArgumentException, nicht aber bei Verkettung der strings. Der Ausdruck sollte doch vor der Verkettung ausgewertet werden?
- Bearbeitet Michael AG Samstag, 29. Dezember 2012 09:21
Antworten
-
Hallo,
nein, da gibt es keine Ausnahme, wozu auch.
Deine ArgumentException kommt vermutlich eher von dem Code, der das Ergebnis verwendet.Der von Dir verwendete String-Konstruktor liefert bei einer Länge von 0 eine leere Zeichenfolge, das ist so dokumentiert, siehe Hinweise.
Eine String Verkettung wird vom C# Compiler in einen Aufruf von String.Concat umgesetzt - welche Variante genau, hängt von der Zahl der Parameter ab. Die Methoden ersetzen Null-Werte durch leere Zeichenfolgen.
Und beides ist IMO sinnvoll, da es unnötige Behandlung von Sonderfällen vermeidet; denn Ausnahmen sollten wie der Name schon sagt die Ausnahme bleiben.
Gruß Elmar
- Bearbeitet Elmar BoyeEditor Samstag, 29. Dezember 2012 10:44
- Als Antwort markiert Michael AG Samstag, 29. Dezember 2012 11:06
Alle Antworten
-
Hallo,
nein, da gibt es keine Ausnahme, wozu auch.
Deine ArgumentException kommt vermutlich eher von dem Code, der das Ergebnis verwendet.Der von Dir verwendete String-Konstruktor liefert bei einer Länge von 0 eine leere Zeichenfolge, das ist so dokumentiert, siehe Hinweise.
Eine String Verkettung wird vom C# Compiler in einen Aufruf von String.Concat umgesetzt - welche Variante genau, hängt von der Zahl der Parameter ab. Die Methoden ersetzen Null-Werte durch leere Zeichenfolgen.
Und beides ist IMO sinnvoll, da es unnötige Behandlung von Sonderfällen vermeidet; denn Ausnahmen sollten wie der Name schon sagt die Ausnahme bleiben.
Gruß Elmar
- Bearbeitet Elmar BoyeEditor Samstag, 29. Dezember 2012 10:44
- Als Antwort markiert Michael AG Samstag, 29. Dezember 2012 11:06
-
Hallo Elmar,
vielen Dank, ich war mir nicht mehr sicher ob 0 zulässig ist, drum tippte ich ins Immediate Window mit folgenden Ergebnis, was mich wohl in die Irre geführt hat:
new string('#', 0)
'new string('#', 0)' threw an exception of type 'System.ArgumentException'
base {System.SystemException}: {"Value does not fall within the expected range."}
Message: "Value does not fall within the expected range."
ParamName: null
Beste Grüße und Sorry für meine nicht durchdachte Aussage. Manchmal steht man auf der Leitung.
Michael
- Bearbeitet Michael AG Samstag, 29. Dezember 2012 11:15