在向StringBuilder追加字符串的过程中,它的容量和长度是否可以超过其MaxCapacity?
根据MSDN的定义,“MaxCapacity是StringBuilder实例可以容纳的最大字符数”。但是以下两个代码片段的行为是不一致的:
代码片段1: 在下面的代码中,当StringBuilder的长度超过其MaxCapacity时,会抛出ArgumentOutOfRangeException异常 - 这是预期的行为。
代码段2:在下面的代码中,当StringBuilder的长度超过其MaxCapacity时,不会抛出ArgumentOutOfRangeException异常- 此行为似乎是不正确的。
根据MSDN的定义,“MaxCapacity是StringBuilder实例可以容纳的最大字符数”。但是以下两个代码片段的行为是不一致的:
代码片段1: 在下面的代码中,当StringBuilder的长度超过其MaxCapacity时,会抛出ArgumentOutOfRangeException异常 - 这是预期的行为。
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
代码段2:在下面的代码中,当StringBuilder的长度超过其MaxCapacity时,不会抛出ArgumentOutOfRangeException异常- 此行为似乎是不正确的。
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"
请问有人能解释一下这两种情况中发生了什么以及为什么行为不同吗?
StringBuilder sb = new StringBuilder(0, 5);
,第二个示例会抛出异常。 - Amit Kumar Ghosh