IEnumerator<T>继承了IDisposable,即使我没有什么可处置的,我也必须实现Dispose。我是否应该继续进行议案?

public sealed class NothingEnumerator<T> : IEnumerator<T>
{
    private bool disposed;

    public object Current
    {
        get
        {
            if (disposed) throw new ObjectDisposedException("NothingEnumerator");
            return default(T);
        }
    }

    public void Dispose()
    {
        disposed = true;
    }

    public bool MoveNext()
    {
        if (disposed) throw new ObjectDisposedException("NothingEnumerator");
        return false;
    }

    public void Reset()
    {
        if (disposed) throw new ObjectDisposedException("NothingEnumerator");
    }
}


或不?

public sealed class NothingEnumerator<T> : IEnumerator<T>
{
    public object Current
    {
        get { return default(T); }
    }

    public void Dispose()
    {
    }

    public bool MoveNext()
    {
        return false;
    }

    public void Reset()
    {
    }
}


换句话说,“已处置”对象是否必须抛出?

最佳答案

仅当调用方尝试执行由于对象被处置而无法执行的操作时,才应引发异常。如果即使对象被处置后,他们尝试执行的操作也可以正常工作,则没有理由抛出该错误。

当然,如果您想扔东西,当然欢迎。最终,这是您的决定,但是,与方法/属性依赖于不再存在的资源的情况不同,这不再是迫使您抛出的原因。

关于c# - 继承IDisposable而无需处理的情况该怎么办?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27427982/

10-10 11:25