si aspetta una funzione che prende IEnumerable e l'eccezione e restituisce void.
void SendExceptionToCustomers(IEnumerable<Customer> customers, Exception ex) {
foreach(var customer in customers)
customer.SendMessage(ex.Message);
}
GetCustomers(SendExceptionToCustomers);
btw, GetCustomers sembra un nome terribile per questa funzione - è chiedere un'azione, quindi il suo più come DoSomethingToCustomers
EDIT in risposta a commentare
Ok, ha senso, quindi ora perché preoccuparsi di avere una funzione GetCustomer? Non posso fare la stessa cosa con la tua funzione se io lo rinomassi semplicemente GetCustomer?
Bene, quello che sta accadendo qui è che il chiamante può specificare qualche azione.GetCustomers Supponiamo che è implementato in questo modo:
public void GetCustomers(Action<Enumerable<Customer>, Exception> handleError) {
Customer[] customerlist = GetCustomersFromDatabase();
try {
foreach(var c in customerList)
c.ProcessSomething()
} catch (Exception e) {
handleError(customerList, e);
}
}
allora si potrebbe chiamare GetCustomers da qualche parte su un programma a riga di comando, e passarlo
GetCustomers((list, exception) => {
Console.WriteLine("Encountered error processing the following customers");
foreach(var customer in list) Console.WriteLine(customer.Name);
Console.WriteLine(exception.Message);
});
mentre si potrebbe chiamare GetCustomers da un'applicazione remota, per esempio, e passarlo
Getcustomers((list, exception) => {
// code that emails me the exception message and customer list
})
Inoltre, il commento di Slak suggerisce un altro motivo per il parametro delegato - GetCusto mers recupera i clienti, ma in modo asincrono. Ogni volta che viene effettuato il recupero dei clienti, chiama la funzione che gli viene assegnata con la lista clienti o un'eccezione, se si è verificata un'eccezione.
concordato sul cattivo nome. –
Sembra che il callback riceva i clienti che sono stati caricati (o un'eccezione) dopo che i clienti hanno caricato in modo asincrono. – SLaks
Mi piacerebbe fare qualcosa ai clienti la maggior parte del tempo, specialmente quando sono fastidiosi. –