2009-12-22 12 views

Antwort

9

Sie könnten Ihre eigenen Func Delegaten erstellen, oder Sie könnten auf die Ankunft von .NET 4 warten (es enthält integrierte Func und Action Delegaten mit bis zu 16 Parametern).

Wie andere bereits erwähnt haben, ist es an der Zeit, über eine Art Refactoring nachzudenken, wenn Sie einen Delegaten finden, der diese vielen Parameter akzeptiert.

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 erlaubt eine unbegrenzte Anzahl? Übrigens, können Sie ein Beispiel für die 'Func'-Delegierten, von denen Sie sprechen, veröffentlichen? – Geo

+1

Nein, keine unbegrenzte Nummer. Sie können bis zu 16 Parameter haben –

+1

Refactoring? Nein, zu früh. Auch 'String.Compare' nimmt 7 Parameter auf. – Mehrdad

2

Erstellen Sie ein Parameterobjekt, vielleicht?

Der refactor Katalog ein good description.

Güte hat,

Dan

+1

Das Muss Buch lesen __CODE complete__ empfiehlt bis zu 7 Parameter. :-) –

+0

Ich denke, Steve McConnell muss einen sehr großen Monitor gehabt haben, um die Methodensignaturen zu lesen;) Einverstanden von ganzem Herzen RE: Muss lesen. –

4

In .Net 4, gibt es Überlastungen bis 17 (mehr oder weniger) Parameter.

Ich persönlich denke, das ist verrückt. Wenn Sie mehr als 4 Parameter benötigen, ist es an der Zeit, eine neue Klasse mit allen Parametern zu erstellen, die Sie als Eigenschaften benötigen.

+2

Ich finde es etwas lächerlich, dass Sie das für "verrückt" halten. Selbst eine der fundamentalsten Operationen, 'Array.Copy', hat 5 Parameter, ebenso wie' String.Compare' (** 7 ** Parameter) und im Allgemeinen viele Funktionen, die Item/Offset/Count-Eingaben und ähnliches haben. – Mehrdad

Verwandte Themen