Comment créer une méthode plus générique?

J'ai une méthode:

        public ServiceAppointment UpdateService(Guid serviceGuid, Guid serviceActivityGuid)
        {
//this is repeated in 20 methods
            var serviceAppointment = organizationService.Retrieve(
                "serviceappointment",
                serviceActivityGuid,
                new ColumnSet(true));
//end
//Only the section here will vary
            serviceAppointment["serviceid"] = new EntityReference("service", serviceGuid);
//End

//this is repeated in 20 methods
            organizationService.Update(serviceAppointment);

            return GetServiceActivity(serviceActivityGuid);
//end
        }

Comme vous pouvez le voir ci-dessus, seule cette section changera d'une méthode à l'autre:

serviceAppointment["serviceid"] = new EntityReference("service", serviceGuid);

Est-il possible de créer une méthode qui exécutera le début et la fin de la méthode ci-dessus et acceptera comme paramètre la ligne qui change?

0
l--''''''---------'''''''''''' 16 janv. 2017 à 21:14

2 réponses

Meilleure réponse

Vous pouvez utiliser un délégué pour injecter la différence:

public ServiceAppointment UpdateService(Guid serviceGuid, Guid serviceActivityGuid, Action<Entity> action)
{
    var serviceAppointment = organizationService.Retrieve(
            "serviceappointment",
            serviceActivityGuid,
            new ColumnSet(true));

    action(serviceAppointment);

    organizationService.Update(serviceAppointment);

    return GetServiceActivity(serviceActivityGuid);
}

L'appeler serait:

UpdateService(serviceGuid, serviceActivityGuid, 
    e => e["serviceid"] = new EntityReference("service", serviceGuid));
4
Eric 16 janv. 2017 à 19:26

Les délégués sont la façon dont vous avez une méthode d'acceptation du code à exécuter en tant que paramètre. Dans votre cas, vous voulez une méthode qui accepte un serviceAppointment comme paramètre et ne fournit aucune sortie comme la méthode UpdateService devrait accepter, c'est un Action<ServiceAppointment>. L'appelant peut alors fournir une méthode (éventuellement anonyme) qui définit simplement les valeurs appropriées de ce rendez-vous de service.

1
Servy 16 janv. 2017 à 18:17