T 当前 属性 vs IEnumerator 当前 c#
T current property vs IEnumerator current c#
我实现了 IEnumerable 和 IEnumerator 的通用版本。在 IEnumerator 我有两个电流 属性
1-T电流
2- IEnumerator.Current
第一:为什么我有两个电流属性?
第二:当我将调试点放在第二个 属性 时,我看到这个 属性 永远不会执行,当我从这个 属性 更改 return 值时,我的代码中没有任何改变。
请有人描述一下
public class Seller<T> : IEnumerable<T>
{
T[] _array;
public Seller(T[] list)
{
_array = list;
}
public IEnumerator<T> GetEnumerator()
{
return new UserDefinedEnum<T>(_array);
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
public class UserDefinedEnum<T> : IEnumerator<T>
{
int _index = -1;
T[] _array;
public UserDefinedEnum(T[] list)
{
_array = list;
}
public T Current
{
get
{
return _array[_index];
}
}
object IEnumerator.Current
{
get
{
return null;
}
}
public void Dispose()
{
}
public bool MoveNext()
{
_index++;
return _index < _array.Length;
}
public void Reset()
{
_index = -1;
}
}
first: why i have two current property?
因为泛型IEnumerator<T>
继承了非泛型IEnumerator
接口。您需要实现这两个接口,并且 T Current { get; }
不满足 IEnumerator
的 object Current { get; }
成员。 (T
可能不是引用类型。)
second: when i put debug point in second property i saw that this property never execute and when i change return value from this property nothing in my code changed.
因为您的代码中没有任何内容将实例视为 IEnumerator
;一切都以 IEnumerator<T>
.
的形式访问它
如果您将 Seller<T>
对象引用分配给 IEnumerable
( 而不是 IEnumerable<T>
),然后写入 foreach
遍历它,你 将 看到 object IEnumerable.Current
getter 被调用。
Notes to Implementers
Implementing this interface requires implementing the nongeneric IEnumerator interface. The Current property appears on both interfaces, and has different return types. Implement the nongeneric Current property as an explicit interface implementation. This allows any consumer of the nongeneric interface to consume the generic interface.
我实现了 IEnumerable 和 IEnumerator 的通用版本。在 IEnumerator 我有两个电流 属性 1-T电流 2- IEnumerator.Current 第一:为什么我有两个电流属性? 第二:当我将调试点放在第二个 属性 时,我看到这个 属性 永远不会执行,当我从这个 属性 更改 return 值时,我的代码中没有任何改变。 请有人描述一下
public class Seller<T> : IEnumerable<T>
{
T[] _array;
public Seller(T[] list)
{
_array = list;
}
public IEnumerator<T> GetEnumerator()
{
return new UserDefinedEnum<T>(_array);
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
public class UserDefinedEnum<T> : IEnumerator<T>
{
int _index = -1;
T[] _array;
public UserDefinedEnum(T[] list)
{
_array = list;
}
public T Current
{
get
{
return _array[_index];
}
}
object IEnumerator.Current
{
get
{
return null;
}
}
public void Dispose()
{
}
public bool MoveNext()
{
_index++;
return _index < _array.Length;
}
public void Reset()
{
_index = -1;
}
}
first: why i have two current property?
因为泛型IEnumerator<T>
继承了非泛型IEnumerator
接口。您需要实现这两个接口,并且 T Current { get; }
不满足 IEnumerator
的 object Current { get; }
成员。 (T
可能不是引用类型。)
second: when i put debug point in second property i saw that this property never execute and when i change return value from this property nothing in my code changed.
因为您的代码中没有任何内容将实例视为 IEnumerator
;一切都以 IEnumerator<T>
.
如果您将 Seller<T>
对象引用分配给 IEnumerable
( 而不是 IEnumerable<T>
),然后写入 foreach
遍历它,你 将 看到 object IEnumerable.Current
getter 被调用。
Notes to Implementers
Implementing this interface requires implementing the nongeneric IEnumerator interface. The Current property appears on both interfaces, and has different return types. Implement the nongeneric Current property as an explicit interface implementation. This allows any consumer of the nongeneric interface to consume the generic interface.