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
- DecoderFallback.cs
- BodyGlyph.cs
- ParseHttpDate.cs
- DeclarationUpdate.cs
- GifBitmapEncoder.cs
- OuterGlowBitmapEffect.cs
- EntityCommandCompilationException.cs
- TagPrefixInfo.cs
- AttributeQuery.cs
- SchemaNotation.cs
- XmlSchemaAnyAttribute.cs
- Subtract.cs
- FlowchartDesignerCommands.cs
- ConfigXmlSignificantWhitespace.cs
- SectionInput.cs
- PolicyDesigner.cs
- MessageContractImporter.cs
- DATA_BLOB.cs
- MsmqBindingMonitor.cs
- IBuiltInEvidence.cs
- ProgressBarRenderer.cs
- ReferentialConstraint.cs
- SoapAttributeOverrides.cs
- ArgumentValue.cs
- SqlNotificationEventArgs.cs
- LexicalChunk.cs
- DrawingCollection.cs
- BindingsCollection.cs
- OracleLob.cs
- XhtmlTextWriter.cs
- PluralizationServiceUtil.cs
- dataprotectionpermission.cs
- DomainUpDown.cs
- CustomAssemblyResolver.cs
- RegistryConfigurationProvider.cs
- FontWeight.cs
- ConsoleCancelEventArgs.cs
- DesignerVerbCollection.cs
- BamlRecordReader.cs
- Base64Encoder.cs
- SocketPermission.cs
- DBAsyncResult.cs
- ImportedNamespaceContextItem.cs
- MetafileHeader.cs
- COM2IDispatchConverter.cs
- HttpPostedFileBase.cs
- WebRequestModuleElement.cs
- RadialGradientBrush.cs
- HuffCodec.cs
- CollectionChangeEventArgs.cs
- UrlMappingsModule.cs
- Rule.cs
- Formatter.cs
- ApplicationSecurityManager.cs
- translator.cs
- ExceptionWrapper.cs
- CmsUtils.cs
- _ConnectOverlappedAsyncResult.cs
- SiteMapNode.cs
- SourceSwitch.cs
- VisualStates.cs
- CharacterBufferReference.cs
- ToggleButtonAutomationPeer.cs
- XPathEmptyIterator.cs
- RegistrationProxy.cs
- SqlWebEventProvider.cs
- xmlfixedPageInfo.cs
- OletxDependentTransaction.cs
- EventSetter.cs
- XmlImplementation.cs
- LingerOption.cs
- SqlDataSourceCache.cs
- Size.cs
- SymbolPair.cs
- HashHelpers.cs
- Pen.cs
- MobilePage.cs
- SupportingTokenDuplexChannel.cs
- TextProperties.cs
- SHA1Managed.cs
- ActivityExecutorDelegateInfo.cs
- XmlHierarchicalEnumerable.cs
- SystemEvents.cs
- ProxyGenerator.cs
- VectorCollectionValueSerializer.cs
- MarkupExtensionSerializer.cs
- SerializationObjectManager.cs
- WrappedKeySecurityTokenParameters.cs
- TableCellCollection.cs
- EntityViewGenerator.cs
- EndpointDiscoveryMetadata.cs
- VSWCFServiceContractGenerator.cs
- GeneralTransform3D.cs
- storepermission.cs
- ObsoleteAttribute.cs
- ArgIterator.cs
- bidPrivateBase.cs
- ColumnBinding.cs
- SpotLight.cs
- XmlSerializationGeneratedCode.cs