Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / ndp / fx / src / XmlUtils / System / Xml / Xsl / Runtime / StringConcat.cs / 1 / 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. //------------------------------------------------------------------------------ // // 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
- DataObjectCopyingEventArgs.cs
- RowUpdatingEventArgs.cs
- CollectionChangedEventManager.cs
- UInt32.cs
- DynamicQueryableWrapper.cs
- InlineUIContainer.cs
- StringUtil.cs
- ObjectCacheSettings.cs
- ComEventsInfo.cs
- BaseProcessProtocolHandler.cs
- DataGridViewUtilities.cs
- SessionStateSection.cs
- ComplexObject.cs
- KeyedCollection.cs
- Soap.cs
- WindowsImpersonationContext.cs
- HTTPNotFoundHandler.cs
- SeekableReadStream.cs
- UrlMappingsSection.cs
- SoapSchemaImporter.cs
- RecipientInfo.cs
- EventLogPermissionAttribute.cs
- PropertyPathWorker.cs
- ActiveDocumentEvent.cs
- InfoCardAsymmetricCrypto.cs
- QueryCacheEntry.cs
- OleDbTransaction.cs
- WizardForm.cs
- ParseHttpDate.cs
- ProcessHostConfigUtils.cs
- BindingValueChangedEventArgs.cs
- UpdatePanelTriggerCollection.cs
- MouseButtonEventArgs.cs
- IdentityNotMappedException.cs
- Cloud.cs
- PrePrepareMethodAttribute.cs
- Table.cs
- SpellCheck.cs
- Triplet.cs
- StylusPointProperty.cs
- RawStylusSystemGestureInputReport.cs
- mediaeventargs.cs
- SiteMapDataSourceView.cs
- FormViewUpdateEventArgs.cs
- PreProcessInputEventArgs.cs
- RegexCompiler.cs
- BoundsDrawingContextWalker.cs
- EventWaitHandle.cs
- BaseValidatorDesigner.cs
- ClassHandlersStore.cs
- GridPattern.cs
- FormViewDeletedEventArgs.cs
- DrawToolTipEventArgs.cs
- Semaphore.cs
- XMLUtil.cs
- DataServiceClientException.cs
- DocumentsTrace.cs
- CodeSnippetTypeMember.cs
- ListViewInsertionMark.cs
- StringHelper.cs
- SourceSwitch.cs
- ObjectStateFormatter.cs
- BeginStoryboard.cs
- PropertyInfo.cs
- Attribute.cs
- StructuredProperty.cs
- validation.cs
- RegularExpressionValidator.cs
- StylusPointCollection.cs
- MemberDomainMap.cs
- CodePrimitiveExpression.cs
- XmlCustomFormatter.cs
- UnlockCardRequest.cs
- ProjectionCamera.cs
- HebrewCalendar.cs
- odbcmetadatacollectionnames.cs
- DataGridViewComboBoxCell.cs
- NegatedConstant.cs
- MessageEventSubscriptionService.cs
- FilteredAttributeCollection.cs
- MonitorWrapper.cs
- AssemblyBuilder.cs
- XmlIgnoreAttribute.cs
- ValidationResult.cs
- PromptStyle.cs
- CompiledRegexRunner.cs
- ByteKeyFrameCollection.cs
- Point3DAnimation.cs
- RoutedEventArgs.cs
- HyperLinkDataBindingHandler.cs
- CaseStatement.cs
- DrawListViewSubItemEventArgs.cs
- CompModSwitches.cs
- ReachSerializableProperties.cs
- ReachDocumentReferenceSerializerAsync.cs
- FrameworkElement.cs
- TransformerConfigurationWizardBase.cs
- __ComObject.cs
- NamespaceQuery.cs
- AppSettingsReader.cs