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
- SHA1Managed.cs
- ContextMenuStripGroup.cs
- RowVisual.cs
- _NegoStream.cs
- JournalEntry.cs
- ComponentRenameEvent.cs
- DataServiceKeyAttribute.cs
- EmissiveMaterial.cs
- ReachDocumentReferenceSerializerAsync.cs
- PathTooLongException.cs
- EntityClassGenerator.cs
- AttributeUsageAttribute.cs
- SqlBuffer.cs
- HttpClientCertificate.cs
- DataServiceHostFactory.cs
- AutomationTextAttribute.cs
- TextProviderWrapper.cs
- WindowsStatusBar.cs
- NullReferenceException.cs
- SingleKeyFrameCollection.cs
- AdjustableArrowCap.cs
- AdapterDictionary.cs
- localization.cs
- ContractMapping.cs
- ImageBrush.cs
- ByteStack.cs
- ContentPlaceHolder.cs
- EntityUtil.cs
- TypeUtil.cs
- EdgeModeValidation.cs
- Point3DCollectionConverter.cs
- IPPacketInformation.cs
- MediaCommands.cs
- SQLStringStorage.cs
- Helpers.cs
- ArgumentException.cs
- SQLBinary.cs
- OptimisticConcurrencyException.cs
- CultureInfoConverter.cs
- SqlConnection.cs
- WebReferencesBuildProvider.cs
- HttpRuntimeSection.cs
- CompositeScriptReferenceEventArgs.cs
- MultipartContentParser.cs
- ConvertTextFrag.cs
- VectorValueSerializer.cs
- DataRowExtensions.cs
- CapabilitiesState.cs
- RegistryDataKey.cs
- DPCustomTypeDescriptor.cs
- SurrogateEncoder.cs
- XmlUrlEditor.cs
- Size3DConverter.cs
- MultilineStringConverter.cs
- HostingEnvironment.cs
- GeometryDrawing.cs
- Pair.cs
- SafePEFileHandle.cs
- RefreshEventArgs.cs
- CommandTreeTypeHelper.cs
- EventLogPermissionAttribute.cs
- Maps.cs
- OleDbPropertySetGuid.cs
- AspCompat.cs
- Latin1Encoding.cs
- ListBoxItem.cs
- FixedFlowMap.cs
- TriggerAction.cs
- TextEffect.cs
- cookieexception.cs
- DragCompletedEventArgs.cs
- EntityDataSourceValidationException.cs
- GeneralTransformGroup.cs
- XmlSchemaAnyAttribute.cs
- InputBinder.cs
- XmlNodeReader.cs
- VirtualPathUtility.cs
- cache.cs
- SettingsSavedEventArgs.cs
- ValidationRule.cs
- TableProviderWrapper.cs
- ApplicationGesture.cs
- WebPartMenu.cs
- UDPClient.cs
- PrintDialog.cs
- CodeTypeDeclarationCollection.cs
- ToolStripContentPanelRenderEventArgs.cs
- TypeLoadException.cs
- OracleNumber.cs
- RowSpanVector.cs
- CompoundFileDeflateTransform.cs
- ManualResetEvent.cs
- Queue.cs
- ListDictionary.cs
- AttachedPropertyBrowsableWhenAttributePresentAttribute.cs
- securestring.cs
- JsonServiceDocumentSerializer.cs
- LinqDataSource.cs
- Vector.cs
- UInt64Storage.cs