2015-03-17 2 views
0

В настоящее время я реализовал его, как показано ниже, но я не люблю его из-за дублирования кода в GetEnumerator, как я могу устранить дублирование ...правильный способ реализации IEnumerable <t> без дублирования кода

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 ...

Я могу создать список, чтобы избежать дублирования кода, но я считаю, что должен быть лучший способ справиться с этим. ..

ответ

4

Просто имейте не общая версия называть общую версию (Также это более «нормальным», чтобы иметь интерфейс версия explictit быть не родовое IEnumerable вместо родовых IEnumerable<T>)

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(); 
    } 
} 
+0

ReSharper по умолчанию создала необщие один, как общественность. и это действительно вызвало проблему .. спасибо за ответ – harishr

+1

@entre Нет, на самом деле это не так. – Aron

+1

@entre Я также могу подтвердить, что нет. Я использую Resharper, и он всегда делает общее представление. Единственный способ, которым это может произойти, - это реализовать его в IEnumerable, а затем вы сказали, что он реализует 'IEnumerable ' –

Смежные вопросы