Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Xml / System / Xml / XPath / XPathNodeIterator.cs / 2 / XPathNodeIterator.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //[....] //----------------------------------------------------------------------------- namespace System.Xml.XPath { using System; using System.Collections; using System.Diagnostics; using System.Text; [DebuggerDisplay("Position={CurrentPosition}, Current={debuggerDisplayProxy}")] public abstract class XPathNodeIterator : ICloneable, IEnumerable { internal int count = -1; object ICloneable.Clone() { return this.Clone(); } public abstract XPathNodeIterator Clone(); public abstract bool MoveNext(); public abstract XPathNavigator Current { get; } public abstract int CurrentPosition { get; } public virtual int Count { get { if (count == -1) { XPathNodeIterator clone = this.Clone(); while(clone.MoveNext()) ; count = clone.CurrentPosition; } return count; } } public virtual IEnumerator GetEnumerator() { return new Enumerator(this); } private object debuggerDisplayProxy { get { return Current == null ? null : (object)new XPathNavigator.DebuggerDisplayProxy(Current); } } ////// Implementation of a resetable enumerator that is linked to the XPathNodeIterator used to create it. /// private class Enumerator : IEnumerator { private XPathNodeIterator original; // Keep original XPathNodeIterator in case Reset() is called private XPathNodeIterator current; private bool iterationStarted; public Enumerator(XPathNodeIterator original) { this.original = original.Clone(); } public virtual object Current { get { // 1. Do not reuse the XPathNavigator, as we do in XPathNodeIterator // 2. Throw exception if current position is before first node or after the last node if (this.iterationStarted) { // Current is null if iterator is positioned after the last node if (this.current == null) throw new InvalidOperationException(Res.GetString(Res.Sch_EnumFinished, string.Empty)); return this.current.Current.Clone(); } // User must call MoveNext before accessing Current property throw new InvalidOperationException(Res.GetString(Res.Sch_EnumNotStarted, string.Empty)); } } public virtual bool MoveNext() { // Delegate to XPathNodeIterator if (!this.iterationStarted) { // Reset iteration to original position this.current = this.original.Clone(); this.iterationStarted = true; } if (this.current == null || !this.current.MoveNext()) { // Iteration complete this.current = null; return false; } return true; } public virtual void Reset() { this.iterationStarted = false; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Point3DCollection.cs
- DataAdapter.cs
- _ChunkParse.cs
- TrackingWorkflowEventArgs.cs
- ToolboxItemCollection.cs
- IPEndPoint.cs
- PasswordPropertyTextAttribute.cs
- HttpStreamXmlDictionaryReader.cs
- SelectionHighlightInfo.cs
- _LoggingObject.cs
- SessionEndingEventArgs.cs
- WinEventTracker.cs
- PlaceHolder.cs
- DSASignatureDeformatter.cs
- FileDetails.cs
- InternalResources.cs
- MetaData.cs
- MemberInfoSerializationHolder.cs
- PointLight.cs
- DataGridViewColumnTypeEditor.cs
- HtmlElementEventArgs.cs
- PassportAuthentication.cs
- Base64Encoding.cs
- NetNamedPipeSecurity.cs
- SynchronizationScope.cs
- ConsoleTraceListener.cs
- RuntimeVariableList.cs
- EnvironmentPermission.cs
- IncrementalReadDecoders.cs
- AddInDeploymentState.cs
- DataListItem.cs
- CodeTypeReferenceExpression.cs
- DocumentScope.cs
- SapiRecoContext.cs
- IdentityModelStringsVersion1.cs
- SecurityContextSecurityTokenParameters.cs
- WebBaseEventKeyComparer.cs
- __Filters.cs
- StackOverflowException.cs
- AuthenticatingEventArgs.cs
- TextEffect.cs
- InvalidAsynchronousStateException.cs
- WindowsSecurityToken.cs
- DataFieldEditor.cs
- RequestSecurityToken.cs
- DynamicMetaObjectBinder.cs
- GenericQueueSurrogate.cs
- Renderer.cs
- SymbolEqualComparer.cs
- MetabaseServerConfig.cs
- Rule.cs
- RolePrincipal.cs
- ProfessionalColorTable.cs
- ConfigurationManager.cs
- TargetException.cs
- StringTraceRecord.cs
- FilterEventArgs.cs
- ChannelSinkStacks.cs
- InlineObject.cs
- ListViewItemEventArgs.cs
- ListenerAdaptersInstallComponent.cs
- WebConfigurationHost.cs
- __ConsoleStream.cs
- OutputScopeManager.cs
- SingleSelectRootGridEntry.cs
- WebPartUtil.cs
- WebServiceParameterData.cs
- Range.cs
- ContentElement.cs
- OleDbMetaDataFactory.cs
- FormatException.cs
- FixedSOMContainer.cs
- ErrorTableItemStyle.cs
- BitSet.cs
- CellNormalizer.cs
- ProgressBarHighlightConverter.cs
- TypeDescriptionProviderAttribute.cs
- EmptyQuery.cs
- WebPartCloseVerb.cs
- CompModSwitches.cs
- Array.cs
- StorageEntityContainerMapping.cs
- DateBoldEvent.cs
- PointConverter.cs
- PtsHost.cs
- TabControl.cs
- PerfCounterSection.cs
- DiagnosticTrace.cs
- MetadataCache.cs
- DataControlField.cs
- Point4D.cs
- Message.cs
- BookmarkScopeHandle.cs
- EventRoute.cs
- StylusButtonCollection.cs
- LockedAssemblyCache.cs
- SqlTriggerContext.cs
- FeatureSupport.cs
- CacheEntry.cs
- WinFormsSpinner.cs