2010-02-02 8 views
10

He notado algo raro con linq y el método Contiene. Parece confundirse sobre qué método Contiene para llamar.Linq contiene confusión

if (myString.Contains(strVar, StringComparison.OrdinalIgnoreCase)) 
{ 
    // Code here     
} 

El código anterior no se compila con el error siguiente:

Los argumentos de tipo para el método System.Linq.Enumerable.Contains'(System.Collections.Generic.IEnumerable, TSource, System.Collections .Generic.IEqualityComparer) 'no se puede deducir del uso. Intente especificar los argumentos de tipo explícitamente.

Si elimino el uso de la sentencia linq, está contento con el contenido (pero frena todo el código linq).

¿Cuál es la sintaxis correcta para decirle al compilador que quiero usar el método String.Contains y no Linqs?

Saludos

+7

que el título es más divertido cuando lo lee mal. –

+0

Ha Ha cierto. Supongo que había más sabiduría en el título que la pregunta en sí. – Magpie

Respuesta

7

Esto se debe a que no hay String.Contains(string, StringComparison) método definido en el BCL y el compilador intenta utilizar un método de extensión. Solo está definido el método String.Contains(string).

+0

Lol, aplausos. Podría haber jurado que sí. – Magpie

1

Podría ser debido a que el método string.Contains toma sólo un parámetro (a string, no hay sobrecarga de string.Contains que toma un valor StringComparison), mientras que el método Enumarable.Contains extensión toma dos. Sin embargo, los parámetros que usted proporciona no se ajustan a los tipos de entrada esperados, por lo que el compilador se confunde.

0

Como dijo Darin Dimitrov, String.Contains(string, StringComparison) no existe como un método para el tipo String.

System.Linq.Enumerable sin embargo, contiene dicha firma. Y un string también es un IEnumerable<char>, por eso el compilador se confunde. Se podría realmente ser capaz de aprovechar LINQ y compilar si reemplazó el StringCompar- Ison con un er ICompar- de Char:

if (myString.Contains(strVar, Comparer<Char>.Default)) 
{ 
    // Code here     
} 
+1

string es un 'IEnumerable ' –

+0

Esto no funcionará. 'cadena' no implementa' IEnumerable '. – jason

+0

lo siento, sí, f1x0red – herzmeister