Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / XmlUtils / System / Xml / Xsl / Runtime / StringConcat.cs / 1305376 / StringConcat.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Diagnostics; using System.ComponentModel; namespace System.Xml.Xsl.Runtime { ////// Efficiently concatenates strings when the number of string is not known beforehand, and /// yet it is common for only one string to be concatenated. StringBuilder is not good for /// this purpose, since it *always* allocates objects, even if only one string is appended. /// [EditorBrowsable(EditorBrowsableState.Never)] public struct StringConcat { private string s1, s2, s3, s4; private string delimiter; private ListstrList; int idxStr; /// /// Clear the result string. /// public void Clear() { this.idxStr = 0; this.delimiter = null; } ////// Gets or sets the string that delimits concatenated strings. /// public string Delimiter { get { return this.delimiter; } set { this.delimiter = value; } } ////// Return the number of concatenated strings, including delimiters. /// internal int Count { get { return this.idxStr; } } ////// Concatenate a new string to the result. /// public void Concat(string value) { Debug.Assert(value != null); if (this.delimiter != null && this.idxStr != 0) { // Add delimiter ConcatNoDelimiter(this.delimiter); } ConcatNoDelimiter(value); } ////// Get the result string. /// public string GetResult() { switch (this.idxStr) { case 0: return string.Empty; case 1: return this.s1; case 2: return string.Concat(this.s1, this.s2); case 3: return string.Concat(this.s1, this.s2, this.s3); case 4: return string.Concat(this.s1, this.s2, this.s3, this.s4); } return string.Concat(this.strList.ToArray()); } ////// Concatenate a new string to the result without adding a delimiter. /// internal void ConcatNoDelimiter(string s) { switch (this.idxStr) { case 0: this.s1 = s; break; case 1: this.s2 = s; break; case 2: this.s3 = s; break; case 3: this.s4 = s; break; case 4: // Calling Clear() is expensive, allocate a new List instead int capacity = (this.strList == null) ? 8 : this.strList.Count; ListstrList = this.strList = new List (capacity); strList.Add(this.s1); strList.Add(this.s2); strList.Add(this.s3); strList.Add(this.s4); goto default; default: this.strList.Add(s); break; } this.idxStr++; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- GZipObjectSerializer.cs
- AlphabeticalEnumConverter.cs
- MailAddress.cs
- InlineUIContainer.cs
- Timer.cs
- XmlFormatWriterGenerator.cs
- NumberFormatter.cs
- ControlParameter.cs
- DependencyObjectPropertyDescriptor.cs
- ObfuscationAttribute.cs
- NonParentingControl.cs
- DataSvcMapFileSerializer.cs
- Cursors.cs
- OuterGlowBitmapEffect.cs
- SystemUdpStatistics.cs
- TableLayout.cs
- SspiNegotiationTokenProvider.cs
- FormattedTextSymbols.cs
- FocusWithinProperty.cs
- GlyphingCache.cs
- PngBitmapEncoder.cs
- SettingsProviderCollection.cs
- TreeViewAutomationPeer.cs
- HttpRawResponse.cs
- ReachDocumentSequenceSerializerAsync.cs
- ActivityTypeDesigner.xaml.cs
- EnterpriseServicesHelper.cs
- SHA1Cng.cs
- ProviderMetadataCachedInformation.cs
- SqlError.cs
- SwitchAttribute.cs
- ListBoxDesigner.cs
- HttpApplication.cs
- PeerApplication.cs
- COM2TypeInfoProcessor.cs
- DiagnosticsConfiguration.cs
- RichTextBox.cs
- ScriptReference.cs
- SmiMetaData.cs
- ResizeBehavior.cs
- SelectionRange.cs
- ClientData.cs
- ManagementBaseObject.cs
- UniqueIdentifierService.cs
- OpenTypeMethods.cs
- SecureStringHasher.cs
- Span.cs
- ApplicationDirectory.cs
- BitmapFrameDecode.cs
- NameGenerator.cs
- SystemIPv4InterfaceProperties.cs
- ContainsSearchOperator.cs
- PassportPrincipal.cs
- SizeKeyFrameCollection.cs
- CharacterString.cs
- SafeMILHandle.cs
- EntityCommandExecutionException.cs
- MemberProjectedSlot.cs
- BulletedListEventArgs.cs
- Point3DCollectionValueSerializer.cs
- ZipIOCentralDirectoryBlock.cs
- StrokeNodeEnumerator.cs
- XPathChildIterator.cs
- Html32TextWriter.cs
- ResourceManagerWrapper.cs
- DataListItem.cs
- brushes.cs
- FormViewInsertEventArgs.cs
- CompiledQuery.cs
- WindowsTab.cs
- ChangesetResponse.cs
- MetadataSerializer.cs
- CodeTypeReferenceCollection.cs
- SimpleApplicationHost.cs
- XamlTreeBuilder.cs
- IPAddressCollection.cs
- XmlLanguage.cs
- DataServiceClientException.cs
- EventHandlers.cs
- BinaryConverter.cs
- DynamicHyperLink.cs
- DrawingImage.cs
- CompatibleIComparer.cs
- HashCryptoHandle.cs
- PopupEventArgs.cs
- DynamicPropertyHolder.cs
- ConnectionManagementElementCollection.cs
- Base64Decoder.cs
- NamespaceQuery.cs
- ContentType.cs
- GestureRecognizer.cs
- TemplateControlCodeDomTreeGenerator.cs
- HttpCookieCollection.cs
- ISAPIRuntime.cs
- DoubleLinkList.cs
- SingleConverter.cs
- FakeModelPropertyImpl.cs
- TreeWalkHelper.cs
- Tablet.cs
- MultipleViewProviderWrapper.cs