Passage d'un délégué avec deux paramètres en tant que paramètre de la fonction

J'ai une suite de fonctions qui se ressemblent beaucoup, mais pour une seule ligne, comme les deux suivants (mais j'ai beaucoup plus d'entre eux):

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, dans certains de manière élégante, qui m'aurait permis d'invoquer quelque chose comme:

HowManyDaysInTheFirstPeriod(
    samples,
    delegate(DateTime d1, DateTime d2) { return d1.Month == d2.Month; });

ainsi déclare un délégué comme suit:

delegate bool DateComparer(DateTime first, DateTime second);

et où HowManyDaysInTheFirstPeriod devait ê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 comparer a besoin de deux paramètres.

Je suis relativement nouveau à C# et a frappé un barrage routier ici.
Comment voulez-vous résoudre ce problème?

  • BTW, pour quelqu'un qui dit qu'ils sont assez nouveau pour le C#, c'est un très judicieux d'utiliser des délégués. Bravo à vous pour repérer la répétition et de l'affacturage dans un délégué.