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
- QilXmlReader.cs
- DragEventArgs.cs
- SerialPinChanges.cs
- loginstatus.cs
- GetRecipientRequest.cs
- DependencyPropertyChangedEventArgs.cs
- CircleHotSpot.cs
- UrlMappingsSection.cs
- BlockCollection.cs
- MenuItem.cs
- SystemUdpStatistics.cs
- MappingModelBuildProvider.cs
- OleDbDataAdapter.cs
- HtmlLinkAdapter.cs
- WindowsRichEdit.cs
- GridViewPageEventArgs.cs
- AuthenticateEventArgs.cs
- ImportCatalogPart.cs
- RadioButton.cs
- X509ServiceCertificateAuthenticationElement.cs
- DataGridCommandEventArgs.cs
- BindingCompleteEventArgs.cs
- IsolatedStorageException.cs
- TableHeaderCell.cs
- GridSplitterAutomationPeer.cs
- ThicknessKeyFrameCollection.cs
- DataGridViewCellStateChangedEventArgs.cs
- Metadata.cs
- NewArrayExpression.cs
- ControlSerializer.cs
- StorageBasedPackageProperties.cs
- EmptyEnumerable.cs
- XmlTextReaderImpl.cs
- CornerRadius.cs
- OptimalBreakSession.cs
- ViewSimplifier.cs
- Attributes.cs
- TableHeaderCell.cs
- HtmlWindowCollection.cs
- EventRecord.cs
- DNS.cs
- TimerEventSubscription.cs
- PropertyItemInternal.cs
- SqlServer2KCompatibilityAnnotation.cs
- TypeSystem.cs
- DictionarySectionHandler.cs
- KeyPressEvent.cs
- BooleanFacetDescriptionElement.cs
- ComponentChangingEvent.cs
- KnownTypes.cs
- ListChangedEventArgs.cs
- GridViewDeleteEventArgs.cs
- SqlDuplicator.cs
- LogSwitch.cs
- KerberosReceiverSecurityToken.cs
- InertiaExpansionBehavior.cs
- _StreamFramer.cs
- TypeConverter.cs
- TypeConverterAttribute.cs
- _Events.cs
- WindowsUserNameSecurityTokenAuthenticator.cs
- StringAnimationBase.cs
- PageSettings.cs
- WebPermission.cs
- AdapterDictionary.cs
- StubHelpers.cs
- TcpAppDomainProtocolHandler.cs
- ToRequest.cs
- RootProjectionNode.cs
- querybuilder.cs
- securitycriticaldataClass.cs
- URLIdentityPermission.cs
- SqlServices.cs
- CopyAction.cs
- IDispatchConstantAttribute.cs
- Size.cs
- KnownTypeHelper.cs
- DesignerHelpers.cs
- UrlPropertyAttribute.cs
- ButtonPopupAdapter.cs
- StrongName.cs
- ListenerAdaptersInstallComponent.cs
- RevocationPoint.cs
- NominalTypeEliminator.cs
- ReferenceEqualityComparer.cs
- WebPartZoneBase.cs
- FrameworkElementFactoryMarkupObject.cs
- UnmanagedMarshal.cs
- CalendarDateRange.cs
- TransportOutputChannel.cs
- TextLine.cs
- ClientBuildManager.cs
- ArgumentsParser.cs
- RadioButtonDesigner.cs
- UserNamePasswordValidator.cs
- QilUnary.cs
- Keywords.cs
- ImagingCache.cs
- Compiler.cs
- METAHEADER.cs