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 }); 
} 

Esiste un modo maiuscole e minuscole per ottenere un metodo?GetMethod senza distinzione tra maiuscole e minuscole?

risposta

22

Sì, utilizzare BindingFlags.IgnoreCase:

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

Attenzione la possibile ambiguità, si otterrebbe un AmbiguousMatchException.

+0

Se c'è un'ambiguità, cosa succederà? Restituirà solo il primo che trova? – mpen

+0

@Logan: Grazie :) Questo è un po 'strano però; se l'unica modifica che faccio al codice precedente è di aggiungere l'argomento 'BindFlags', il mio codice smette di funzionare. 'method' diventa nullo, anche con BindingFlags.Default. Cosa potrebbe causare l'interruzione di corrispondenza * qualsiasi *? – mpen

+0

@Mark - il mio errore, i flag predefiniti non si applicano più. Post aggiornato. –

2

Dai un'occhiata a questa variante di GetMethod, in particolare si noti che uno dei possibili BindingFlags è IgnoreCase.

3

Per ottenere un metodo che agisce come GetMethod (filtro), tranne che ignora il caso è necessario:

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

questo non funzionerà: metodo var = filterType.GetMethod (filtro, BindingFlags.IgnoreCase);

Problemi correlati