none
ArgumentException in String Verkettung mit + Operator wird geschluckt RRS feed

  • 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
    Samstag, 29. Dezember 2012 09:16

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

    Samstag, 29. Dezember 2012 10:39
    Beantworter

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

    Samstag, 29. Dezember 2012 10:39
    Beantworter
  • 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
    Samstag, 29. Dezember 2012 11:05