Ответ 1
Это связано с тем, что в BCL нет метода String.Contains(string, StringComparison)
, и компилятор пытается использовать метод расширения. Там определяется только метод String.Contains(string).
Я заметил что-то странное с linq и методом Contains. Кажется, он запутался в том, что Содержит метод для вызова.
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?
Приветствия
Это связано с тем, что в BCL нет метода String.Contains(string, StringComparison)
, и компилятор пытается использовать метод расширения. Там определяется только метод String.Contains(string).
Каков правильный синтаксис, чтобы сообщить компилятору, что я хочу использовать метод
String.Contains
, а не Linqs?
Нет перегрузки String.Contains
, который принимает StringComparision
. Возможно, вы захотите использовать String.IndexOf(string, StringComparison)
:
// s is string
if(s.IndexOf(strVar, StringComparison.OrdinalIgnoreCase) >= 0) {
// code here
}
Это может быть потому, что метод string.Contains
принимает только один параметр (a string
; перегрузка string.Contains
, которая принимает значение StringComparison
), в то время как метод расширения Enumarable.Contains
занимает два. Однако параметры, которые вы поставляете, не соответствуют ожидаемым типам ввода, поэтому компилятор запутывается.
Как сказал Дарин Димитров, String.Contains(string, StringComparison)
не существует как метод для типа String
.
System.Linq.Enumerable
однако содержит такую подпись. А String
также является IEnumerable<char>
, поэтому компилятор запутывается. Фактически вы могли бы использовать Linq и компилировать, если бы вы заменили StringCompar- ison на ICompar- er из Char
:
if (myString.Contains(strVar, Comparer<Char>.Default))
{
// Code here
}