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
- Color.cs
- EngineSite.cs
- formatstringdialog.cs
- FloatUtil.cs
- HtmlContainerControl.cs
- EndPoint.cs
- ApplicationSettingsBase.cs
- ConnectionConsumerAttribute.cs
- WorkerRequest.cs
- WindowsUpDown.cs
- Soap12FormatExtensions.cs
- ISFTagAndGuidCache.cs
- RepeatBehaviorConverter.cs
- InvalidFilterCriteriaException.cs
- ListViewGroupItemCollection.cs
- ValueProviderWrapper.cs
- Inflater.cs
- StyleHelper.cs
- Rect.cs
- EndOfStreamException.cs
- NavigatorOutput.cs
- RequestQueue.cs
- EpmContentDeSerializer.cs
- HeaderPanel.cs
- ConfigurationManager.cs
- TemplateKey.cs
- DataIdProcessor.cs
- RadioButtonFlatAdapter.cs
- CorrelationManager.cs
- OutputCacheProfileCollection.cs
- _ProxyChain.cs
- ValidationError.cs
- TimeSpanStorage.cs
- HttpChannelBindingToken.cs
- LocalizableAttribute.cs
- DataServiceException.cs
- BooleanConverter.cs
- ListChangedEventArgs.cs
- Renderer.cs
- VerticalAlignConverter.cs
- MetadataItemSerializer.cs
- AdornerPresentationContext.cs
- SmiEventSink.cs
- UnsignedPublishLicense.cs
- LineBreak.cs
- WebSysDefaultValueAttribute.cs
- DataGridBoundColumn.cs
- WebHttpElement.cs
- XsltOutput.cs
- XmlUnspecifiedAttribute.cs
- XPathNavigator.cs
- TypeResolver.cs
- PathFigure.cs
- TextReader.cs
- WebPartMinimizeVerb.cs
- MatrixKeyFrameCollection.cs
- WebBrowserPermission.cs
- ManagementClass.cs
- RepeatButtonAutomationPeer.cs
- WebBrowserSiteBase.cs
- RemotingException.cs
- FileInfo.cs
- SchemaHelper.cs
- Attributes.cs
- RoutingEndpointTrait.cs
- ItemCollectionEditor.cs
- Latin1Encoding.cs
- Bookmark.cs
- SelectionRange.cs
- DataViewManager.cs
- EncryptedKey.cs
- StrokeCollectionDefaultValueFactory.cs
- DnsElement.cs
- M3DUtil.cs
- GridView.cs
- SqlDataSourceView.cs
- PartBasedPackageProperties.cs
- InternalResources.cs
- CrossSiteScriptingValidation.cs
- MSAAEventDispatcher.cs
- TextProperties.cs
- XsdBuilder.cs
- QilGenerator.cs
- InheritanceRules.cs
- SamlDelegatingWriter.cs
- SQLChars.cs
- ColorAnimationBase.cs
- TextMessageEncodingElement.cs
- LocalizationParserHooks.cs
- ListViewItemMouseHoverEvent.cs
- InputScopeNameConverter.cs
- InternalBase.cs
- Effect.cs
- PointAnimationUsingPath.cs
- CompatibleComparer.cs
- DefaultBindingPropertyAttribute.cs
- AspNetHostingPermission.cs
- ListViewInsertedEventArgs.cs
- NameValueCollection.cs
- PermissionListSet.cs