Linq содержит беспорядок

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

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

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

Аргументы типа для метода 'Система. Linq. Счетный. Содержит (Система. Наборы. Универсальный. IEnumerable, TSource, Система. Наборы. Универсальный. IEqualityComparer)', не может быть выведен из использования. Попытайтесь определить аргументы типа явно.

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

Что правильный синтаксис состоит в том, чтобы сказать компилятору, что я хочу использовать Строку. Содержит метод и не Linqs?

Аплодисменты

10
задан Magpie 2 February 2010 в 16:48
поделиться

4 ответа

ImmutureList подобен Collections.unmodifyList (новый ArrayList (список)) . Обратите внимание, что вновь созданный ArrayList не назначен полю или переменной.

-121--1065016-

Не используйте систему Source Safe! Это не только плохо для системы управления версиями, но и плохо для всего мира.

Я использую Subversion с черепахой. Мне очень нравится. Довольно легко встать и бежать. Ветвление/слияние все еще может быть кошмаром.

Визуальный SVN тоже хорош.

-121--3227025-

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

8
ответ дан 4 December 2019 в 00:24
поделиться

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

Там не является перегрузкой String.Contains , которая принимает StringComparision . Вы можете использовать String.IndexOf (string, StringComparison) :

// s is string
if(s.IndexOf(strVar, StringComparison.OrdinalIgnoreCase) >= 0) {
    // code here
}
3
ответ дан 4 December 2019 в 00:24
поделиться

Это может быть связано с тем, что String.Contains метод принимает только один параметр (строка ; там Нет перегрузки string . Подходит , которые занимают stringComprison значение), в то время как enumableable.Contains Метод расширения занимает два. Однако параметры, которые вы поставляете, не соответствуют ожидаемым типам ввода, поэтому компилятор запутается.

1
ответ дан 4 December 2019 в 00:24
поделиться

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

System.Linq.Enumerable , однако, содержит такую ​​подпись. И строка также является IEnumerable , поэтому компилятор запутывается. Фактически вы сможете использовать Linq и компилировать, если замените StringCompar- ison на ICompar- er из Char :

if (myString.Contains(strVar, Comparer<Char>.Default))
{
    // Code here                  
}
0
ответ дан 4 December 2019 в 00:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: