Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / fx / src / Xml / System / Xml / XPath / XPathNodeIterator.cs / 3 / 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
- SamlAssertionDirectKeyIdentifierClause.cs
- CheckPair.cs
- ProcessStartInfo.cs
- _NegoState.cs
- CompilerState.cs
- BamlTreeNode.cs
- SelectionRangeConverter.cs
- UpdateManifestForBrowserApplication.cs
- UrlMappingCollection.cs
- CryptoConfig.cs
- BuildProviderUtils.cs
- HtmlInputPassword.cs
- Argument.cs
- DeadCharTextComposition.cs
- CfgParser.cs
- DrawingState.cs
- Win32Native.cs
- AdPostCacheSubstitution.cs
- Win32.cs
- ExtendedTransformFactory.cs
- LinkedResourceCollection.cs
- ServiceHostingEnvironment.cs
- QilReference.cs
- ClientRuntime.cs
- ADConnectionHelper.cs
- SafeRegistryKey.cs
- Switch.cs
- DataView.cs
- DataGridViewCell.cs
- InternalConfigSettingsFactory.cs
- DataColumnMapping.cs
- itemelement.cs
- COM2FontConverter.cs
- XmlExpressionDumper.cs
- StringOutput.cs
- ObjectItemConventionAssemblyLoader.cs
- LazyLoadBehavior.cs
- SerializationHelper.cs
- EntityStoreSchemaFilterEntry.cs
- SqlDeflator.cs
- StrokeNodeData.cs
- Compiler.cs
- TemplateField.cs
- CaseInsensitiveHashCodeProvider.cs
- PhysicalFontFamily.cs
- NetworkStream.cs
- SoapExtensionTypeElement.cs
- SingleAnimationUsingKeyFrames.cs
- SqlNamer.cs
- WebEventCodes.cs
- VirtualPathData.cs
- NativeMethods.cs
- CodeExpressionStatement.cs
- SystemFonts.cs
- WorkflowStateRollbackService.cs
- InputLanguageCollection.cs
- ZipIOModeEnforcingStream.cs
- TraceUtils.cs
- Visual.cs
- WebServiceBindingAttribute.cs
- CodeGeneratorOptions.cs
- DateTimeOffsetAdapter.cs
- path.cs
- FrameworkPropertyMetadata.cs
- AmbientProperties.cs
- TypeSystem.cs
- Environment.cs
- Int64.cs
- AnnotationDocumentPaginator.cs
- DoubleAnimationUsingPath.cs
- RangeContentEnumerator.cs
- BasicKeyConstraint.cs
- CatalogPartChrome.cs
- SettingsPropertyIsReadOnlyException.cs
- RawStylusSystemGestureInputReport.cs
- XmlResolver.cs
- DrawingGroupDrawingContext.cs
- RegexGroup.cs
- UserControl.cs
- GridViewDeleteEventArgs.cs
- Listbox.cs
- Identity.cs
- XmlUrlResolver.cs
- KeyTimeConverter.cs
- ObjectDataSourceFilteringEventArgs.cs
- EncodingStreamWrapper.cs
- HwndTarget.cs
- TimeoutHelper.cs
- AutoScrollHelper.cs
- PageCache.cs
- ImpersonationContext.cs
- WebPartTracker.cs
- HtmlListAdapter.cs
- XmlSerializationWriter.cs
- CatalogZone.cs
- DataGridViewCellStyleChangedEventArgs.cs
- DataSourceControlBuilder.cs
- PropertyPathConverter.cs
- ProxyHelper.cs
- GPRECT.cs