J'ai une suite de fonctions qui ressemblent beaucoup, mais pour une seule ligne, comme les deux suivantes (mais j'ai beaucoup plus d'entre eux):Le passage d'un délégué avec deux paramètres en fonction des paramètres
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;
}
Je pensais à l'aide de délégués pour supprimer cette répétition dans le code d'une manière élégante, qui me aurait permis d'invoquer quelque chose comme:
HowManyDaysInTheFirstPeriod(
samples,
delegate(DateTime d1, DateTime d2) { return d1.Month == d2.Month; });
déclarant ainsi un délégué comme ce qui suit:
delegate bool DateComparer(DateTime first, DateTime second);
et où HowManyDaysInTheFirstPeriod whould être quelque chose comme ce qui suit:
private static int HowManySamplesInFirstPeriod
IList<T> samples,
DateComparer comparer)
{
DateTime firstDate = samples[0].Date;
int count = 0;
while (count < samples.Count && comparer())
{
count++;
}
}
Malheureusement, le compilateur se plaint que deux paramètres comparateur besoins. Je suis relativement nouveau à C# et frappé un barrage routier ici. Comment voulez-vous résoudre ce problème?
BTW, pour quelqu'un qui dit qu'ils sont assez nouveaux en C#, c'est une utilisation très judicieuse des délégués. Bravo à vous pour repérer la répétition et l'assimiler dans un délégué. –