將字符串附加到StringBuilder
時,其容量和長度是否會超出其MaxCapacity
?StringBuilder:StringBuilder的長度和容量是否可以超過MaxCapacity
根據MSDN,MaxCapacity被定義爲「字符串構建器實例可容納的最大字符數」。但是,這種行爲是在下面的兩段代碼不一致:
片段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: 在下面的代碼NO ArgumentOutOfRangeException
當StringBuilder的長度超過其MAXCAPACITY被拋出 - 該行爲似乎是不正確的。
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"
誰能請解釋什麼在這兩種情況下發生的,爲什麼在行爲的差異?
檢查此鏈接:https://msdn.microsoft。com/en-us/library/system.text.stringbuilder.maxcapacity(v = vs.110).aspx –
StringBuilder的容量從0開始不爲1. 0 +「1」+「12」+「123」= 6 – Gregg
有趣。如果你嘗試'StringBuilder sb = new StringBuilder(0,5);',則會拋出第二個示例。 –