|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.Collections;
namespace System.Windows.Forms;
public partial class DataGridViewRowCollection
{
private class UnsharingRowEnumerator : IEnumerator
{
private readonly DataGridViewRowCollection _owner;
private int _current;
/// <summary>
/// Creates a new enumerator that will enumerate over the rows and un-share the accessed rows if needed.
/// </summary>
public UnsharingRowEnumerator(DataGridViewRowCollection owner)
{
_owner = owner;
_current = -1;
}
/// <summary>
/// Moves to the next element, or returns false if at the end.
/// </summary>
bool IEnumerator.MoveNext()
{
if (_current < _owner.Count - 1)
{
_current++;
return true;
}
else
{
_current = _owner.Count;
return false;
}
}
/// <summary>
/// Resets the enumeration back to the beginning.
/// </summary>
void IEnumerator.Reset()
{
_current = -1;
}
/// <summary>
/// Retrieves the current value in the enumerator.
/// </summary>
object IEnumerator.Current
{
get
{
if (_current == -1)
{
throw new InvalidOperationException(SR.DataGridViewRowCollection_EnumNotStarted);
}
if (_current == _owner.Count)
{
throw new InvalidOperationException(SR.DataGridViewRowCollection_EnumFinished);
}
return _owner[_current];
}
}
}
}
|