2010-10-24 9 views
12
foreach(var filter in filters) 
{ 
    var filterType = typeof(Filters); 
    var method = filterType.GetMethod(filter); 
    if (method != null) value = (string)method.Invoke(null, new[] { value }); 
} 

Existe-t-il un moyen insensible à la casse pour obtenir une méthode?Insensible à la casse GetMethod?

Répondre

22

Oui, utiliser BindingFlags.IgnoreCase:

var method = filterType.GetMethod(filter, 
    BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance); 

Attention l'ambiguïté possible, vous obtiendrez un AmbiguousMatchException.

+0

S'il y a une ambiguïté, que se passera-t-il? Va-t-il juste retourner le premier qu'il trouve? – mpen

+0

@Logan: Merci :) C'est un peu étrange cependant; si le seul changement que je fais au code ci-dessus est d'ajouter l'argument 'BindFlags', mon code cesse de fonctionner. 'method' devient nulle, même avec BindingFlags.Default. Qu'est-ce qui l'empêcherait de faire correspondre * n'importe quoi *? – mpen

+0

@Mark - mon erreur, les drapeaux par défaut ne s'appliquent plus. Post mis à jour. –

2

Jetez un oeil à cette variante de GetMethod, en particulier noter que l'un des BindingFlags possible est IgnoreCase.

3

Pour obtenir une méthode qui agit comme GetMethod (filtre), sauf qu'il ne tient pas compte du cas dont vous avez besoin:

var method = filterType.GetMethod(filter, BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance| BindingFlags.IgnoreCase); 

Cela ne fonctionnera pas: méthode var = filterType.GetMethod (filtre, BindingFlags.IgnoreCase)