Dizeleri StringBuilder
'a eklerken, Kapasitesi ve Uzunluğu MaxCapacity
'un ötesine geçebilir mi?StringBuilder: StringBuilder'ın uzunluğu ve kapasitesi MaxCapacity değerini aşar
MSDN'e göre MaxCapacity "String oluşturucu örneğinin tutabileceği maksimum karakter sayısı" olarak tanımlanır. Ama bu davranış iki kod snippet'ine aşağıda tutarsız:
Parçacığı 1: StringBuilder uzunluğu onun MaxCapacity aştığında aşağıdaki kodu ArgumentOutOfRangeException
yılında atılır - beklendiği gibi olmasıdır.
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: StringBuilder uzunluğu, MaxCapacity aştığında, aşağıdaki kod no ArgumentOutOfRangeException
olarak atılır - Bu davranış, hatalı olduğu görülmektedir. Bu iki durumda da oluyor ve neden davranış farkıdır neyin
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"
Herkes lütfen açıklayabilir? Arayanlara
bu bağlantıyı kontrol edin: https://msdn.microsoft.com/en-us/library/system.text.stringbuilder.maxcapacity (v = vs.110) .aspx –
StringBuilder kapasitesi 0 değil 1'den başlıyor. 0 + "1" + "12" + "123" = 6 – Gregg
İlginç. Eğer StringBuilder sb = yeni StringBuilder (0, 5); 'ı denerseniz, ikinci örnek atar. –