2009-03-09 9 views
20

Rozważmy tę metodę Podpis:Określanie, czy parametr używa "params" przy użyciu odbicie w C#?

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

Jak można ustalić że metoda WriteLine za „myObjects” pararameter używa słowa kluczowego params i może przyjmować zmienne argumentów?

+5

Jak to się różni od http://stackoverflow.com/ question/252656/does-reflection-expose-if-the-last-argument-for-a-method-was-marked-with-params? –

Odpowiedz

30

Sprawdź, czy istnieje na nim [ParamArrayAttribute].

Parametr z params będzie zawsze ostatnim parametrem.

15

Sprawdź ParameterInfo, jeśli ParamArrayAttribute została zastosowana do niego:

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

Jeśli chcesz tylko sprawdzić obecność atrybutu niestandardowego, ale nie potrzebujesz rzeczywistej instancji atrybutu, to 'IsDefined' jest bardziej wydajne niż' GetCustomAttributes'. – stakx

7

Nieco krótsze i bardziej czytelny sposób:

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