在没有代码重复的情况下实现 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();
}
}
目前我已经像下面那样实现了它,但是我不喜欢它,因为 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();
}
}