假设 Current 在 MoveNext 之前被调用,在这种情况下应该做什么?应该有什么行为?抛出异常?还是恢复默认?MSDN 简单地说 Current 应该/可以是未定义的,但是什么是好的做法呢?显然,这个问题是有争议的,但人们的观点很有趣。
public struct Enumerator : IEnumerator<T>
{
// просто для примера: флаг, что MoveNext не был вызван, и, соответствено, Current не валиден
bool readyToWork;
// вариант 1
public T Current
{
get
{
if (readyToWork) return validCurrentValue;
else throw new SomeException("Call MoveNext first!");
}
}
// вариант 2
public T Current
{
get
{
if (readyToWork) return validCurrentValue;
else return default;
}
}
}