2009-12-22 12 views

risposta

9

È possibile creare i propri delegati Func oppure attendere l'arrivo di .NET 4 (include i delegati integrati Func e Action con un massimo di sedici parametri).

Come altri hanno già accennato, se si trova il bisogno di un delegato che prende questi parametri allora forse è il momento di pensare a una sorta di refactoring.

public delegate TResult Func<T1, T2, T3, T4, T5, TResult> 
    (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5); 

public delegate TResult Func<T1, T2, T3, T4, T5, T6, TResult> 
    (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6); 

public delegate TResult Func<T1, T2, T3, T4, T5, T6, T7, TResult> 
    (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7); 

public delegate TResult Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> 
    (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8); 

// etc 
+1

.Net 4 consentirà un numero illimitato? A proposito, puoi pubblicare un esempio per i delegati di 'Func' di cui stai parlando? – Geo

+1

No, non un numero illimitato. È possibile avere fino a 16 parametri –

+1

Refactoring? Nah, troppo presto. Anche 'String.Compare' accetta 7 parametri. – Mehrdad

2

Creare un oggetto parametro, forse?

Il catalogo refactoring ha una gentilezza good description.

,

Dan

+1

Il libro di lettura obbligatorio __CODE complete__ raccomanda fino a 7 parametri. :-) –

+0

Penso che Steve McConnell debba avere un monitor molto grande per leggere le firme dei metodi;) Accetto con tutto il cuore RE: Deve leggere. –

4

In .Net 4, c'è sovraccarichi fino a 17 parametri (più o meno).

Personalmente, penso che sia pazzesco. Se hai bisogno di più di 4 parametri, è ora di creare una nuova classe che abbia tutti i parametri necessari come proprietà.

+2

Trovo un po 'ridicolo che tu lo consideri "pazzo". Anche una delle operazioni più fondamentali, 'Array.Copy' ha 5 parametri, così come' String.Compare' (** 7 ** parametri) e in generale molte funzioni che dispongono di input item/offset/count e così via. – Mehrdad