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
- XmlSchemaFacet.cs
- RemotingServices.cs
- SqlClientFactory.cs
- CryptoProvider.cs
- UpdatePanelTriggerCollection.cs
- StrokeSerializer.cs
- HttpHeaderCollection.cs
- HyperlinkAutomationPeer.cs
- UpdateProgress.cs
- Stopwatch.cs
- ProfilePropertySettingsCollection.cs
- EncodingStreamWrapper.cs
- NavigationWindow.cs
- CodeTypeReferenceExpression.cs
- TrackingRecord.cs
- ToolTipService.cs
- OleDbPermission.cs
- NextPreviousPagerField.cs
- FreezableCollection.cs
- X509CertificateTokenFactoryCredential.cs
- ExpressionDumper.cs
- DisposableCollectionWrapper.cs
- UrlMappingCollection.cs
- PathHelper.cs
- ObsoleteAttribute.cs
- HMAC.cs
- CheckBox.cs
- CodeTypeMember.cs
- TextStore.cs
- followingquery.cs
- HttpCacheVaryByContentEncodings.cs
- ListItemParagraph.cs
- UnknownBitmapDecoder.cs
- DataGridColumnCollection.cs
- ComponentRenameEvent.cs
- CodeAccessPermission.cs
- ControlCachePolicy.cs
- WebPartTransformerCollection.cs
- GenericAuthenticationEventArgs.cs
- BindingFormattingDialog.cs
- HtmlInputText.cs
- DataQuery.cs
- BulletChrome.cs
- safesecurityhelperavalon.cs
- WebConfigurationHost.cs
- IdleTimeoutMonitor.cs
- ToolStripComboBox.cs
- BitmapEffectInput.cs
- StyleCollection.cs
- GraphicsState.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- SizeF.cs
- PathGradientBrush.cs
- SerialStream.cs
- TrackingMemoryStream.cs
- StringUtil.cs
- SeverityFilter.cs
- DefaultTextStoreTextComposition.cs
- CompositeActivityValidator.cs
- ToolStripPanelRenderEventArgs.cs
- FixedSOMPage.cs
- InlineObject.cs
- DataBoundControlHelper.cs
- sqlcontext.cs
- ConditionalAttribute.cs
- Debug.cs
- PseudoWebRequest.cs
- ObjectContext.cs
- SpellerHighlightLayer.cs
- VariableQuery.cs
- LeafCellTreeNode.cs
- StateMachine.cs
- PackageRelationshipCollection.cs
- ValidatedControlConverter.cs
- DynamicMethod.cs
- VolatileResourceManager.cs
- MimeWriter.cs
- FileDialog.cs
- Group.cs
- QilScopedVisitor.cs
- SqlStatistics.cs
- Function.cs
- dataprotectionpermissionattribute.cs
- XmlAttributeAttribute.cs
- ToolStripPanel.cs
- Cursor.cs
- ToolStripGrip.cs
- ClientSettings.cs
- HtmlTableRow.cs
- MailDefinition.cs
- QuaternionRotation3D.cs
- HotSpot.cs
- OdbcHandle.cs
- XslAstAnalyzer.cs
- CssTextWriter.cs
- CodeSnippetStatement.cs
- AttachmentService.cs
- ExpressionBindingCollection.cs
- XmlParser.cs
- WhiteSpaceTrimStringConverter.cs