2009-03-09 3 views
20

Рассмотрим этот метод подписи:Определение, использует ли параметр "params", используя отражение в C#?

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

Как я могу определить, что «myObjects» pararameter метода; WriteLine использует в Params ключевое слово и может принимать переменные аргументы?

+5

Как это отличается от http://stackoverflow.com/ Вопросы/252656/does-reflection-expose-if-the-last-argument-for-a-method-was-marked-with-params? –

ответ

30

Проверьте наличие [ParamArrayAttribute] на нем.

Параметр с params всегда будет последним параметром.

15

ParameterInfo Проверьте, если ParamArrayAttribute был применен к нему:

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

Если вы хотите проверить наличие пользовательского атрибута, но не нуждаетесь в фактическом экземпляре атрибута, тогда 'IsDefined' более эффективен, чем' GetCustomAttributes'. – stakx

7

немного короче и более читаемым способом:

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

 Смежные вопросы

  • Нет связанных вопросов^_^