在没有代码重复的情况下实现 ienumerable<t> 的正确方法

correct way to implementing ienumerable<t> without code duplication

目前我已经像下面那样实现了它,但是我不喜欢它,因为 GetEnumerator 中的代码重复,我该如何删除重复...

public class EodSettlementRequestStubData : IEnumerable<SettlementRequest>
{

    public SettlementRequest UnapprovedFlows;
    public SettlementRequest UnapprovedRecovery;
    public SettlementRequest UnverifiedFlows;
    public SettlementRequest UnverifiedRecovery;

    IEnumerator<SettlementRequest> IEnumerable<SettlementRequest>.GetEnumerator()
    {
        yield return UnapprovedFlows;
        yield return UnapprovedRecovery;
        yield return UnverifiedFlows;
        yield return UnverifiedRecovery;
    }

    public IEnumerator GetEnumerator()
    {
        yield return UnapprovedFlows;
        yield return UnapprovedRecovery;
        yield return UnverifiedFlows;
        yield return UnverifiedRecovery;
    }
}

我希望能够单独访问它,也希望能够使用 IEnumerable 来执行一些 linq 操作...

我可以创建一个列表来避免代码重复,但我觉得应该有一些更好的方法来处理这个...

让非通用版本调用通用版本(另外,显式接口版本是非通用IEnumerable而不是通用IEnumerable<T>更"normal")

public class EodSettlementRequestStubData : IEnumerable<SettlementRequest>
{

    public SettlementRequest UnapprovedFlows;
    public SettlementRequest UnapprovedRecovery;
    public SettlementRequest UnverifiedFlows;
    public SettlementRequest UnverifiedRecovery;

    public IEnumerator<SettlementRequest> GetEnumerator()
    {
        yield return UnapprovedFlows;
        yield return UnapprovedRecovery;
        yield return UnverifiedFlows;
        yield return UnverifiedRecovery;
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        //This is calling "IEnumerator<SettlementRequest> GetEnumerator()"
        return GetEnumerator();
    }
}