2011-12-01 31 views
12

Buscando una manera de comprobar si una cadena contiene en otro mayúsculas/minúsculas ignorando, encontré it:no puedo acceder a mi Método de extensión

funciona bien. Entonces, traté de ponerlo en mi espacio de nombres StringExtensions.

namespace StringExtensions 
{ 

    public static class StringExtensionsClass 
    { 
     //... 

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

y luego:

using StringExtensions;

...

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

pero me sale el siguiente error:

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

¿Cómo lo arreglo?

Respuesta

5

He encontrado mi error:

para este tipo trabaja con dynamic necesario utilizar un cast a string. . ToString() método no es suficiente.

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

Funciona bien ahora. Gracias otra vez stackoverflow. :)

+4

Correcto, porque es 'dinámico' no hay garantía de que no tenga un método llamado' ToString' que devuelve algo más que una cadena, por lo que el resultado de cualquier llamada a un 'dinámico' siempre se trata como' dinámico' por el compilador – Davy8

20

Cuando se desea utilizar su extensión, añadir esta instrucción using:

using StringExtensions; 

Debido a la forma en que se declararon Los métodos de extensión, Visual Studio no los encontrará por sí mismo, y el método regular Contains toma uno argumento, de ahí tu excepción.

+0

Yup - Intellisense solo _appare_ para que funcione porque el nombre del método ya existe. –

Cuestiones relacionadas