2009-03-09 37 views
20

xem xét phương pháp chữ ký này:Xác định xem tham số có sử dụng "params" sử dụng phản chiếu trong C# không?

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

Làm thế nào tôi có thể xác định rằng phương pháp WriteLine của "myObjects" pararameter sử dụng từ khóa params và có thể một vài tham số biến?

+5

Làm thế nào thực hiện điều này khác với http://stackoverflow.com/ question/252656/does-reflection-expose-if-the-last-argument-for-a-method-đã được đánh dấu-với-params? –

Trả lời

30

Kiểm tra sự tồn tại của [ParamArrayAttribute] trên đó.

Thông số với params sẽ luôn là thông số cuối cùng.

15

Kiểm tra ParameterInfo, nếu ParamArrayAttribute đã được áp dụng cho nó:

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

Nếu bạn chỉ muốn kiểm tra sự hiện diện của thuộc tính tùy chỉnh, nhưng không cần thực thể thuộc tính thực tế, thì 'IsDefined' hiệu quả hơn' GetCustomAttributes'. – stakx

7

Một cách hơi ngắn hơn và dễ đọc hơn:

static bool IsParams(ParameterInfo param) 
{ 
    return param.IsDefined(typeof(ParamArrayAttribute), false); 
} 
Các vấn đề liên quan