C# 实施ienumerable的正确方法<;t>;没有代码重复

C# 实施ienumerable的正确方法<;t>;没有代码重复,c#,linq,ienumerable,C#,Linq,Ienumerable,目前我已经实现了它,如下所示,但我不喜欢它,因为GetEnumerator中的代码重复,我如何删除重复 public class EodSettlementRequestStubData : IEnumerable<SettlementRequest> { public SettlementRequest UnapprovedFlows; public SettlementRequest UnapprovedRecovery; public Settleme

目前我已经实现了它,如下所示,但我不喜欢它,因为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;
    }
}
公共类EodSettlementRequestStubData:IEnumerable
{
未经批准的公共结算请求流;
未经批准的公共结算请求;
未经验证的公共结算请求流;
未经核实的公共结算请求;
IEnumerator IEnumerable.GetEnumerator()
{
未经批准的收益率流动;
未经批准的收益回收;
未经验证的收益率流;
未经验证的收益率;
}
公共IEnumerator GetEnumerator()
{
未经批准的收益率流动;
未经批准的收益回收;
未经验证的收益率流;
未经验证的收益率;
}
}
我想有能力访问它既作为个人,以及一个IEnumerable做一些linq的东西


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

只要让非泛型版本调用泛型版本就行了(同样,让Explicit接口版本为非泛型
IEnumerable
而不是泛型
IEnumerable
,这更“正常”)

公共类EodSettlementRequestStubData:IEnumerable
{
未经批准的公共结算请求流;
未经批准的公共结算请求;
未经验证的公共结算请求流;
未经核实的公共结算请求;
公共IEnumerator GetEnumerator()
{
未经批准的收益率流动;
未经批准的收益回收;
未经验证的收益率流;
未经验证的收益率;
}
IEnumerator IEnumerable.GetEnumerator()
{
//这是在调用“IEnumerator GetEnumerator()”
返回GetEnumerator();
}
}

只要让非泛型版本调用泛型版本就行了(同样,让explicit接口版本为非泛型
IEnumerable
而不是泛型
IEnumerable
更“正常”)

公共类EodSettlementRequestStubData:IEnumerable
{
未经批准的公共结算请求流;
未经批准的公共结算请求;
未经验证的公共结算请求流;
未经核实的公共结算请求;
公共IEnumerator GetEnumerator()
{
未经批准的收益率流动;
未经批准的收益回收;
未经验证的收益率流;
未经验证的收益率;
}
IEnumerator IEnumerable.GetEnumerator()
{
//这是在调用“IEnumerator GetEnumerator()”
返回GetEnumerator();
}
}

resharper默认情况下将非泛型创建为public。。这实际上是问题的根源。。谢谢你的邀请answer@entre不,真的没有。@entre我也可以证实它没有。我使用Resharper,它总是让通用的公共化。唯一可能发生这种情况的方法是,如果你让它实现
IEnumerable
,然后你告诉它实现
IEnumerable
@Scott你完全正确,我确实做到了。默认情况下,Resharper将非泛型的创建为public。。这实际上是问题的根源。。谢谢你的邀请answer@entre不,真的没有。@entre我也可以证实它没有。我使用Resharper,它总是让通用的公共化。唯一可能发生的方法是,如果你让它实现
IEnumerable
,然后你告诉它实现
IEnumerable
@Scott你完全正确,我确实做到了
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();
    }
}