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
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Validator.cs
- DeadCharTextComposition.cs
- CanExecuteRoutedEventArgs.cs
- Transform.cs
- DocumentPageViewAutomationPeer.cs
- __FastResourceComparer.cs
- DynamicValueConverter.cs
- ComplexBindingPropertiesAttribute.cs
- PropertyGrid.cs
- ImagingCache.cs
- ToolStripSystemRenderer.cs
- DrawingServices.cs
- OleDbCommandBuilder.cs
- RubberbandSelector.cs
- ObjRef.cs
- __Filters.cs
- AuthenticationModuleElement.cs
- AbandonedMutexException.cs
- EnumType.cs
- FontEmbeddingManager.cs
- SQLInt32.cs
- ProviderCollection.cs
- StringResourceManager.cs
- RadioButtonList.cs
- TraceLog.cs
- KerberosRequestorSecurityToken.cs
- ClosableStream.cs
- KnownTypes.cs
- Table.cs
- ObjectStateEntryOriginalDbUpdatableDataRecord.cs
- ChangeConflicts.cs
- WebPartZone.cs
- ConvertTextFrag.cs
- AlphabeticalEnumConverter.cs
- ApplicationServicesHostFactory.cs
- SystemIcons.cs
- ContextDataSourceView.cs
- ByteKeyFrameCollection.cs
- SafeReversePInvokeHandle.cs
- RoleExceptions.cs
- GorillaCodec.cs
- AddInAdapter.cs
- RevocationPoint.cs
- CollectionBuilder.cs
- WindowsProgressbar.cs
- CursorInteropHelper.cs
- ProxyHwnd.cs
- CryptoApi.cs
- IntranetCredentialPolicy.cs
- safelink.cs
- SiteIdentityPermission.cs
- SrgsElementFactory.cs
- QueryableFilterRepeater.cs
- GlobalProxySelection.cs
- CodeAttributeDeclaration.cs
- EdmRelationshipNavigationPropertyAttribute.cs
- StringSorter.cs
- ApplicationContext.cs
- EditableLabelControl.cs
- HandlerWithFactory.cs
- ShapeTypeface.cs
- NegationPusher.cs
- EventManager.cs
- WebEvents.cs
- DetailsViewInsertEventArgs.cs
- ConstructorNeedsTagAttribute.cs
- GridEntry.cs
- Rotation3DAnimationUsingKeyFrames.cs
- DataGridBoolColumn.cs
- AccessDataSourceView.cs
- DateTimeValueSerializerContext.cs
- documentsequencetextcontainer.cs
- OdbcConnectionHandle.cs
- OptionalColumn.cs
- NestedContainer.cs
- CallbackDebugBehavior.cs
- filewebresponse.cs
- MaskInputRejectedEventArgs.cs
- IndexingContentUnit.cs
- XamlPointCollectionSerializer.cs
- Image.cs
- VariantWrapper.cs
- UnsafeNetInfoNativeMethods.cs
- DataConnectionHelper.cs
- ActivityDesignerHelper.cs
- DLinqColumnProvider.cs
- StandardRuntimeEnumValidatorAttribute.cs
- Delay.cs
- EncryptedHeader.cs
- TCPClient.cs
- InstanceView.cs
- XmlNamedNodeMap.cs
- OdbcConnectionStringbuilder.cs
- PeerNameRegistration.cs
- HttpCacheVary.cs
- NamespaceInfo.cs
- MinimizableAttributeTypeConverter.cs
- IPEndPoint.cs
- CodeDomLocalizationProvider.cs
- ActivityTypeCodeDomSerializer.cs