2009-03-09 25 views
20

bu yöntem imzası düşünün:Bir parametrenin C# içindeki yansımayı kullanarak "params" kullanıp kullanmadığını belirleme

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

nasıl WriteLine yöntemin "myObjects" pararameter params anahtar sözcüğünü kullanır ve değişken argüman alabilir belirleyebilir?

+5

bu http://stackoverflow.com/ Farkı Nedir sorular/252656/does-yansıma-pozlama-if-the-son-argüman-için-bir-yöntem-işaretli-ile-params? –

cevap

30

Üzerinde [ParamArrayAttribute] olup olmadığını kontrol edin.

params parametresi her zaman en son parametre olacaktır. Kontrol ParameterInfo

15

, ParamArrayAttribute kendisine uygulandıysa:

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

Yalnızca bir özel özniteliğin varlığını kontrol etmek, ancak asıl öznitelik örneğine gereksinim duymak istemiyorsanız, "IsDefined", "GetCustomAttributes" öğesinden daha verimlidir. – stakx

7

biraz daha kısa ve daha anlaşılabilir bir yol:

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