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
- XmlException.cs
- WebPartMovingEventArgs.cs
- Parser.cs
- FontFamilyConverter.cs
- MatrixTransform.cs
- ConfigXmlComment.cs
- CustomPopupPlacement.cs
- WorkflowDispatchContext.cs
- Parser.cs
- ListBox.cs
- ToolStripDropTargetManager.cs
- GradientStop.cs
- MaskDesignerDialog.cs
- SystemIPAddressInformation.cs
- XmlAttributeHolder.cs
- DrawingVisual.cs
- TableHeaderCell.cs
- Tool.cs
- CodeGen.cs
- TextPointerBase.cs
- COM2ColorConverter.cs
- LocalIdKeyIdentifierClause.cs
- TraceInternal.cs
- HttpCacheVaryByContentEncodings.cs
- OdbcConnectionString.cs
- PkcsUtils.cs
- Lasso.cs
- remotingproxy.cs
- EmptyStringExpandableObjectConverter.cs
- AuthorizationRule.cs
- XmlSchemaFacet.cs
- ResolveCriteria11.cs
- Operators.cs
- CharEntityEncoderFallback.cs
- ElementMarkupObject.cs
- DelegatingTypeDescriptionProvider.cs
- MenuCommand.cs
- SoundPlayer.cs
- SchemaContext.cs
- XmlAtomicValue.cs
- Bidi.cs
- ReflectTypeDescriptionProvider.cs
- AuthorizationRule.cs
- XNodeSchemaApplier.cs
- SqlBulkCopyColumnMapping.cs
- DetailsViewDeleteEventArgs.cs
- RequestCacheManager.cs
- MembershipPasswordException.cs
- XmlAnyElementAttribute.cs
- FormConverter.cs
- BuildManagerHost.cs
- Effect.cs
- PrintDialogException.cs
- invalidudtexception.cs
- CompletionBookmark.cs
- AssociationSet.cs
- DataServiceQuery.cs
- SiteMapNodeCollection.cs
- FontConverter.cs
- ContainerControl.cs
- TextCompositionEventArgs.cs
- DataGridViewTopLeftHeaderCell.cs
- DoubleLink.cs
- X509SecurityTokenProvider.cs
- NetworkInformationPermission.cs
- Activator.cs
- SolidColorBrush.cs
- DelayedRegex.cs
- NavigationWindowAutomationPeer.cs
- log.cs
- TypeSystemProvider.cs
- TypedDataSetSchemaImporterExtensionFx35.cs
- RadioButtonBaseAdapter.cs
- ReceiveSecurityHeader.cs
- WindowsAuthenticationEventArgs.cs
- SynchronizedPool.cs
- BindingManagerDataErrorEventArgs.cs
- FixedPosition.cs
- WorkflowTraceTransfer.cs
- QuadraticBezierSegment.cs
- DoubleAnimationBase.cs
- QueryTaskGroupState.cs
- DesignerForm.cs
- HttpProcessUtility.cs
- Control.cs
- ObjectPropertyMapping.cs
- NavigationHelper.cs
- WebPartCloseVerb.cs
- UnsafeNativeMethods.cs
- MimeMapping.cs
- SerializationInfoEnumerator.cs
- GeneralTransformGroup.cs
- ApplicationTrust.cs
- TypeBrowser.xaml.cs
- BuildManagerHost.cs
- TypeUsage.cs
- PeerPresenceInfo.cs
- SoapWriter.cs
- TextServicesContext.cs
- UnmanagedMarshal.cs