У меня есть последовательность функций, которые выглядят очень похожими, но для одной строки, как и следующие две (но у меня их много):
private static int HowManyHoursInTheFirstYear(IList<T> samples)
{
DateTime firstDate = samples[0].Date;
int count = 0;
while (count < samples.Count &&
samples[count].Date.Year == firstDate.Year)
{
count++;
}
return count;
}
private static int HowManyDaysInTheFirstMonth(IList<T> samples)
{
DateTime firstDate = samples[0].Date;
int count = 0;
while (count < samples.Count &&
samples[count].Date.Month == firstDate.Month) // <--- only change!
count++;
}
return count;
}
Я думал об использовании делегатов, чтобы удалить это повторение в коде каким-то изящным способом, что позволило бы мне вызвать что-то вроде:
HowManyDaysInTheFirstPeriod(
samples,
delegate(DateTime d1, DateTime d2) { return d1.Month == d2.Month; });
тем самым объявив делегата следующим образом:
delegate bool DateComparer(DateTime first, DateTime second);
и где HowManyDaysInTheFirstPeriod будет выглядеть следующим образом:
private static int HowManySamplesInFirstPeriod
IList<T> samples,
DateComparer comparer)
{
DateTime firstDate = samples[0].Date;
int count = 0;
while (count < samples.Count && comparer())
{
count++;
}
}
К сожалению, компилятор жалуется, что для сравнения нужны два параметра.
Я относительно новичок в С# и попал в дорожный блок здесь. Как бы вы решили это?