2009-03-09 4 views
20

considerare questo metodo di firma:Determinare se un parametro utilizza "param" usando il reflection in C#?

public static void WriteLine(string input, params object[] myObjects) 
{ 
    // Do stuff. 
} 

Come è possibile determinare che pararameter "MyObjects" del metodo WriteLine utilizza la parola chiave params e può prendere argomenti variabili?

+5

Come funziona questo differiscono da http://stackoverflow.com/ domande/252656/does-reflection-expose-if-the-last-argument-for-a-method-was-marked-with-params? –

risposta

30

Verificare la presenza di [ParamArrayAttribute] su di esso.

Il parametro con params sarà sempre l'ultimo parametro.

15

Controllare la ParameterInfo, se ParamArrayAttribute è stato applicato ad esso:

static bool IsParams(ParameterInfo param) 
{ 
    return param.GetCustomAttributes(typeof (ParamArrayAttribute), false).Length > 0; 
} 
+0

Se si desidera solo verificare la presenza di un attributo personalizzato, ma non è necessario l'istanza dell'attributo reale, quindi 'IsDefined' è più efficiente di' GetCustomAttributes'. – stakx

7

Un modo un po 'più corta e più leggibile:

static bool IsParams(ParameterInfo param) 
{ 
    return param.IsDefined(typeof(ParamArrayAttribute), false); 
} 
Problemi correlati