2013-04-12 3 views
3

제공된 주파수를 사용하여 두 개의 끝점 사이에 모든 날짜를 가져오고 싶습니다. 그래서 코드의이 간단한 조금 떨어져 내 접근 방식을 내놓고있어 : 이제C#에서 대리자 확장 메서드를 어떻게 할당합니까?

for (DateTime date = startDate; date <= endDate; date = date.AddDays(1)) 
      datesBetween.Add(date); 

을, 나는 때때로 (위와 같이) 일을 추가 할 필요가있는 달을 추가하거나 FrequencyEnum

에 따라 년 추가 그래서 나는 switch를 사용하여 내 사용에 대한 코드를 3 번 ​​반복,하지만 난 위임 확장 메서드 오히려보다는 .AddDays 또는 .AddMonths 또는 .AddYears

을 할당 할 수 있는지 궁금하네요 수있는, 내가 좋아하는 일을하고 싶습니다 this :

for (DateTime date = startDate; date <= endDate; date = date.AddFrequency) 
      datesBetween.Add(date); 

여기서 .AddFrequency은 내 주파수에 필요한 확장 메서드를 정의하는 대리자입니다.

또는 아니요은 확장 방법을 사용하고 단순히 날짜 매개 변수를 사용하는 함수를 사용하고 필요에 따라 돌아갈 수 있습니다.

+0

무슨 잘못'VAR 주파수 = Frequency.Year와;''...''날짜 = date.AddFrequency (주파수)'? – leppie

+0

@leppie 아무것도, 아마도 너무 작동하지만 DateTime 연장 메서드에서 내 특정 frequencyEnum 할당 틀린 것 같습니다 ... – Matthew

답변

2

을 나는 당신이 Func<DateTime, DateTime>

Func<DateTime, DateTime> updater = d => d.AddFrequency(Frequency.Month); 

for (DateTime date = startDate; date <= endDate; date = updater(date)) 
    datesBetween.Add(date); 

은 물론, 실제 코드에서, 당신의 방법은 가능성이 인수로 위임을 받아 들일 것보다는 그 자체를 초기화 할 생각 . moreLinq로 말했다

, 당신은 다만 수 :

var datesBetween = startDate.Generate(date => date.AddDays(1)) 
          .TakeWhile(date => date <= endDate); 
+0

+1, 그것을 '맞게'편집; – leppie

+0

나는이 솔루션을 좋아한다, 그것은 기본적으로 내' Switch '를 다른 메소드로 옮기고'for' 루프를 반복하지 않아도됩니다. – Matthew

1

아니요, 그렇게 할 수 없습니다. 확장 메서드는 정적 클래스 내부의 정적 메서드 여야합니다.

그러나 주파수와 횟수를 사용하는 AddFrequency 확장 방법을 쓸 수 있습니다. 그래서 당신은 쓸 수 :

date = date.AddFrequency(FrequencyEnum.Months, 3) 
관련 문제