2009-03-09 5 views
20

Betrachten Sie diese Methode Unterschrift:Bestimmen, ob ein Parameter "params" verwendet, indem er Reflektion in C# verwendet?

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

Wie kann ich feststellen, dass die das Schlüsselwort params „MyObjects“ pararameter der Writeline-Methode verwendet und variable Argumente annehmen kann?

+5

Wie unterscheidet sich diese von http://stackoverflow.com/ Fragen/252656/does-reflection-expose-Wenn-das-letzte-Argument-für-eine-Methode-wurde-mit-Parametern markiert? –

Antwort

30

Überprüfen Sie auf die Existenz von [ParamArrayAttribute] darauf.

Der Parameter mit params ist immer der letzte Parameter.

15

Überprüfen Sie die ParameterInfo, wenn ParamArrayAttribute auf sie angewendet wurde:

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

Wenn Sie nur nach dem Vorhandensein eines benutzerdefinierten Attributs suchen möchten, aber die tatsächliche Attributinstanz nicht benötigen, ist "IsDefined" effizienter als "GetCustomAttributes". – stakx

7

Eine etwas kürzer und lesbarer Weise:

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