2011-12-01 2 views
12

Alla ricerca di un modo per verificare se una stringa contiene in un altro ignorando/minuscole superiore, ho trovato it:non possono accedere a My Metodo di estensione

funziona bene. Quindi, ho provato a metterlo nel mio spazio dei nomi StringExtensions.

namespace StringExtensions 
{ 

    public static class StringExtensionsClass 
    { 
     //... 

     public static bool Contains(this string target, string toCheck, StringComparison comp) 
     { 
      return target.IndexOf(toCheck, comp) >= 0; 
     } 
    } 
} 

e poi:

using StringExtensions;

...

if (".. a".Contains("A", StringComparison.OrdinalIgnoreCase)) 

ma ottengo il seguente errore:

No overload for method 'Contains' takes '2' arguments

Come posso risolvere il problema?

risposta

5

ho trovato il mio errore:

per questo funziona con dynamic tipo necessario utilizzare un cast per string. . Il metodo ToString() non è sufficiente.

if (((string)result.body).Contains(foo, StringComparison.OrdinalIgnoreCase)) 

Funziona bene ora. Grazie ancora StackOverflow. :)

+4

Esatto, poiché è 'dinamico', non c'è alcuna garanzia che non abbia un metodo chiamato' ToString' che restituisce qualcosa di diverso da una stringa, quindi il risultato di qualsiasi chiamata di metodo su un 'dinamico' viene sempre considerato come' dinamico' dal compilatore – Davy8

20

Quando si desidera utilizzare la propria estensione, aggiungere questa istruzione using:

using StringExtensions; 

A causa del modo in cui i metodi di estensione sono dichiarati, Visual Studio non li troverà da sé, e il metodo regolare Contains prende uno argomento, quindi la tua eccezione.

+0

Sì - Intellisense eseguirà _appear_ solo perché il nome del metodo esiste già. –