2008-10-31 4 views
4

Utilisation de la réflexion sur une définition de méthode Je voudrais savoir si la méthode originale a été définie avec 'params' sur le dernier paramètre. Alors puis-je découvrir si la définition originale était ce ...Est-ce que la réflexion expose si le dernier argument d'une méthode a été marqué avec 'params'?

public void MyMethod(int x, params object[] args); 

... et pas ...

public void MyMethod(int x, object[] args); 

Mon code a une liste d'arguments et utilise la réflexion pour appeler un méthode arbitraire. S'il est marqué avec 'params' alors je veux emballer les paramètres supplémentaires dans un objet [] et appeler la méthode. Si l'argument n'est pas marqué avec 'params' alors je signalerais une erreur à la place. Donc je veux fournir la même sémantique que C#.

Mais je ne trouve pas de documents qui indiquent comment découvrir cela en utilisant la réflexion.

Répondre

11

Utilisez ParamArrayAttribute attribut

class Program 
{ 
    public void MethodWithParams(object param1, params int[] param2) 
    {    
    } 

    static void Main(string[] args) 
    { 
     var method = typeof(Program).GetMethod("MethodWithParams"); 
     var @params = method.GetParameters(); 
     foreach (var param in @params) 
     { 
      Console.WriteLine(param.IsDefined(typeof(ParamArrayAttribute), false)); 
     } 
    } 
} 
Questions connexes