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
- XPathSelectionIterator.cs
- DocumentViewerHelper.cs
- SplitterCancelEvent.cs
- CannotUnloadAppDomainException.cs
- _BufferOffsetSize.cs
- JoinSymbol.cs
- AnimatedTypeHelpers.cs
- MenuAdapter.cs
- FilterInvalidBodyAccessException.cs
- DesignerDataSchemaClass.cs
- StringDictionaryWithComparer.cs
- PlanCompiler.cs
- KeyNotFoundException.cs
- XmlUrlResolver.cs
- safelinkcollection.cs
- ZoneLinkButton.cs
- PointConverter.cs
- ListManagerBindingsCollection.cs
- WebSysDescriptionAttribute.cs
- SqlAggregateChecker.cs
- DataGridViewSortCompareEventArgs.cs
- HttpModuleAction.cs
- AuthorizationRule.cs
- AutomationPropertyInfo.cs
- ActivityExecutionContextCollection.cs
- PathParser.cs
- PrintDialog.cs
- UIElement.cs
- ExcludeFromCodeCoverageAttribute.cs
- DataListDesigner.cs
- SolidBrush.cs
- RuleSettingsCollection.cs
- XmlDocumentType.cs
- DataGridRow.cs
- CodeGotoStatement.cs
- ObjectHelper.cs
- MemoryPressure.cs
- HelpHtmlBuilder.cs
- ObjectDataSourceSelectingEventArgs.cs
- safesecurityhelperavalon.cs
- WebPartZoneAutoFormat.cs
- AbstractSvcMapFileLoader.cs
- SystemWebCachingSectionGroup.cs
- SecurityCredentialsManager.cs
- WebScriptEnablingElement.cs
- BuildProviderAppliesToAttribute.cs
- EditCommandColumn.cs
- RemoveStoryboard.cs
- ZipIOExtraFieldPaddingElement.cs
- ToolStripDropDown.cs
- DbProviderFactories.cs
- EventLogPermissionAttribute.cs
- ObjRef.cs
- CopyAction.cs
- SafeUserTokenHandle.cs
- PolyQuadraticBezierSegment.cs
- SqlBulkCopy.cs
- Itemizer.cs
- HyperlinkAutomationPeer.cs
- GraphicsPath.cs
- NegotiateStream.cs
- ColumnHeader.cs
- FormsAuthentication.cs
- MethodBuilder.cs
- odbcmetadatacollectionnames.cs
- TimeSpanMinutesConverter.cs
- WebConfigurationManager.cs
- DataTableNameHandler.cs
- GreenMethods.cs
- SimpleRecyclingCache.cs
- MultilineStringConverter.cs
- ExceptionValidationRule.cs
- CommonXSendMessage.cs
- BypassElementCollection.cs
- Visitors.cs
- MenuCommands.cs
- SqlServices.cs
- DragEvent.cs
- DeclarativeCatalogPart.cs
- XmlDomTextWriter.cs
- CacheVirtualItemsEvent.cs
- FormClosedEvent.cs
- StoreItemCollection.Loader.cs
- codemethodreferenceexpression.cs
- WebScriptMetadataMessage.cs
- UIHelper.cs
- PathData.cs
- COSERVERINFO.cs
- TextTrailingCharacterEllipsis.cs
- LoggedException.cs
- ScrollBar.cs
- ListItemCollection.cs
- WsrmMessageInfo.cs
- MimeImporter.cs
- FlowDocumentPaginator.cs
- RegexGroup.cs
- DynamicResourceExtension.cs
- LingerOption.cs
- NumberFormatter.cs
- EncryptedReference.cs