Beim Anhängen von Strings an eine StringBuilder
, können seine Kapazität und Länge über seine MaxCapacity
hinaus gehen?StringBuilder: Können StringBuilders Länge und Kapazität die MaxCapacity überschreiten?
Laut MSDN ist MaxCapacity definiert als "Die maximale Anzahl von Zeichen, die String Builder-Instanz enthalten kann". Aber dieses Verhalten ist in folgenden zwei Code-Snippets inkonsistent:
1 Snippet: Im folgenden Code ArgumentOutOfRangeException
ausgelöst wird, wenn die Länge des String seine MaxCapacity überschreitet - Dies ist wie erwartet.
String str = sb.ToString();
StringBuilder sb1 = new StringBuilder(3, 5);
sb1.Append("1"); //no error as Length 1 <= max limit 5
sb1.Append("12"); //no error as Length 3 <= max limit 5
sb1.Append("123"); //ArgumentOutOfRangeException Thrown as Length 6 > max limit 5
Snippet 2: Im folgenden Code NO ArgumentOutOfRangeException
ausgelöst wird, wenn die Länge des String seine MaxCapacity überschreitet - Dieses Verhalten falsch zu sein scheint.
StringBuilder sb = new StringBuilder(3, 5);
sb.Append("1"); //no error as Length 1 <= max limit 5
sb.Append("2"); //no error as Length 2 <= max limit 5
sb.Append("3"); //no error as Length 3 <= max limit 5
sb.Append("4"); //no error as Length 4 <= max limit 5
sb.Append("5"); //no error as Length 5 <= max limit 5
sb.Append("6"); //Even though Length 6 > max limit 5 NO EXCEPTION IS THROWN
String str = sb.ToString(); //Contains "123456"
Kann jemand bitte erklären, was in diesen beiden Fällen geschieht und warum ist der Unterschied im Verhalten?
überprüfen Sie diesen Link: https://msdn.microsoft.com/de-us/library/system.text.stringbuilder.maxcapacity (v = vs.110) .aspx –
Die StringBuilder-Kapazität beginnt bei 0 nicht 1. 0 + "1" + "12" + "123" = 6 – Gregg
Interessant. Wenn Sie 'StringBuilder sb = new StringBuilder (0, 5);' versuchen, wird das zweite Beispiel ausgelöst. –