tengo una secuencia de funciones que son muy similares, pero para una sola línea, al igual que los dos siguientes (pero tengo muchos más de ellos):Pasando un delegado con dos parámetros en función de parámetros
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;
}
estaba pensando acerca del uso de los delegados para eliminar esta repetición en el código de alguna manera elegante, que habría permitido que yo invoco algo como:
HowManyDaysInTheFirstPeriod(
samples,
delegate(DateTime d1, DateTime d2) { return d1.Month == d2.Month; });
declarando así como un delegado lo siguiente:
delegate bool DateComparer(DateTime first, DateTime second);
y donde HowManyDaysInTheFirstPeriod whould ser algo como lo siguiente:
private static int HowManySamplesInFirstPeriod
IList<T> samples,
DateComparer comparer)
{
DateTime firstDate = samples[0].Date;
int count = 0;
while (count < samples.Count && comparer())
{
count++;
}
}
Por desgracia, el compilador se queja de que comparador necesita dos parámetros.
Soy relativamente nuevo en C# y toco un bloqueo de carretera aquí. ¿Cómo resolverías esto?
BTW, para alguien que dice que es bastante nuevo en C#, este es un uso muy razonable de los delegados. Felicitaciones a usted por detectar la repetición y factorizarlo en un delegado. –