文字列をStringBuilder
に追加すると、その容量と長さはMaxCapacity
以上になりますか?StringBuilder:StringBuilderの長さと容量がMaxCapacityを超えてもかまいません
MSDNによると、MaxCapacityは「文字列ビルダーインスタンスが保持できる最大文字数」として定義されています。しかし、この現象は、2つのコードスニペット以下に矛盾して:
スニペット1:以下のコードArgumentOutOfRangeException
で はのStringBuilderの長さがそのMAXCAPACITYを超えたときにスローされる - 予想通りです。
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を超えた場合に、以下のコードNO 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"
誰もがこれらの2つのケースで起こっていただきましたを説明してください、なぜ行動の違いがあることはできますか?呼び出し側へ
このリンクを確認してください: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);'を試してみると、2番目のサンプルがスローされます。 –