2010-02-02 4 views
10

Я заметил что-то странное с linq и методом Contains. Кажется, что запутался, на котором Содержит метод для вызова.Linq содержит путаницу

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

Приведенный выше код не компилируется со следующей ошибкой:

Аргументы типа для метода «System.Linq.Enumerable.Contains (System.Collections.Generic.IEnumerable, TSource, System.Collections .Generic.IEqualityComparer) не может быть выведено из использования. Попробуйте явно указать аргументы типа.

Если я удаляю оператор linq, он доволен содержимым (но тормозит весь код linq).

Каков правильный синтаксис, чтобы сообщить компилятору, что я хочу использовать метод String.Contains, а не Linqs?

Приветствие

+7

, что название это больше удовольствия, когда вы читаете это неправильно. –

+0

Ха-ха истина. Думаю, в названии было больше мудрости, чем самого вопроса. – Magpie

ответ

7

Это происходит потому, что нет String.Contains(string, StringComparison) метода, определенного в BCL и компилятор пытается использовать метод расширения. Определен только метод String.Contains(string).

+0

Lol, приветствия. Может быть, поклялся. – Magpie

1

Это может быть потому, что метод string.Contains принимает только один параметр (а string, там нет перегрузки string.Contains, который принимает значение StringComparison), в то время как метод Enumarable.Contains расширения занимает два. Однако параметры, которые вы поставляете, не соответствуют ожидаемым типам ввода, поэтому компилятор запутывается.

0

Как сказал Дарин Димитров, String.Contains(string, StringComparison) не существует как метод для String типа.

System.Linq.Enumerable однако содержит такую ​​подпись. И string также является IEnumerable<char>, поэтому компилятор запутывается. Вы бы на самом деле быть в состоянии использовать Linq и компиляции, если вы заменили StringCompar- исоном с ICompar- эр из Char:

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

string is 'IEnumerable ' – 2010-02-02 16:58:11

+0

Это не сработает. 'string' не реализует' IEnumerable '. – jason

+0

Извините, да, f1x0red – herzmeister