StringBuilder
पर तार जोड़ते समय, इसकी क्षमता और लंबाई MaxCapacity
से परे हो सकती है?स्ट्रिंगबिल्डर: क्या स्ट्रिंगबिल्डर की लंबाई और क्षमता इसकी अधिकतम क्षमता
एमएसडीएन मैक्स कैपेसिटी के अनुसार "अक्षरों की अधिकतम संख्या स्ट्रिंग बिल्डर इंस्टेंस होल्ड" के रूप में परिभाषित किया गया है। लेकिन इस व्यवहार दो कोड स्निपेट नीचे में असंगत है:
स्निपेट 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: नीचे कोड सं 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 –
स्ट्रिंगबिल्डर क्षमता 0 से शुरू नहीं हो रही है। 0 + "1" + "12" + "123" = 6 – Gregg
दिलचस्प। यदि आप 'स्ट्रिंगबिल्डर एसबी = नया स्ट्रिंगबिल्डर (0, 5) आज़माएं;', दूसरा नमूना फेंकता है। –