Как использовать StringComparison для строк в C#?
string body = Selenium.GetBodyText();
if (body.Contains("software", StringComparison.CurrentCultureIgnoreCase))
{
//do something
}
Я получаю string does not contain a definition for Contains
сообщение, когда я делаю выше. Что я здесь не так делаю? Спасибо всем заранее!
Я пытаюсь проверить, есть ли в теле строка "software", "Software" или "SOFTWARE". Тело будет содержать абзацы и абзацы текста (строки).
9 ответов
Вы можете использовать регулярное выражение для поиска строки в C#. У вас также есть возможность игнорировать регистр.
if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
Эта ссылка может быть полезна: Как: искать строки с помощью регулярных выражений (Руководство по программированию в C#)
Я не верю string
перегружен Contains
принимая StringComparison
, Тем не менее, вы могли бы использовать IndexOf
который делает:
if (body.IndexOf("software", StringComparison.CurrentCultureIgnoreCase) != -1)
Я не уверен, если вы используете.NET 1.1, но он не содержал метод Contains
, Вы должны использовать IndexOf
, В.NET 2.0 добавлен метод Contains (для MSDN). С IndexOf вы можете использовать StringComparison.
String.Contains только один параметр - ваш код должен быть
bodyText.Contains("software");
Contains
имеет только один параметр - строку, с которой он сравнивает. Ты имел ввиду, Equals
который занимает StringComparison
?
Ну, вы всегда можете сделать метод расширения (если вы используете.Net 3.5 или выше):
public static class StringExtensions
{
/// <summary>
/// Returns a value indicating whether the specified String object
/// occurs within this string.
/// </summary>
/// <param name="str">string object being extended</param>
/// <param name="value">string object to check for</param>
/// <param name="comparer">StringComparer to use</param>
public static bool Contains(this string str, string value, StringComparer comparer)
{
StringComparison comparison;
if (comparer == StringComparer.CurrentCulture)
comparison = StringComparison.CurrentCulture;
else if (comparer == StringComparer.CurrentCultureIgnoreCase)
comparison = StringComparison.CurrentCultureIgnoreCase;
else if (comparer == StringComparer.InvariantCulture)
comparison = StringComparison.InvariantCulture;
else if (comparer == StringComparer.InvariantCultureIgnoreCase)
comparison = StringComparison.InvariantCultureIgnoreCase;
else if (comparer == StringComparer.Ordinal)
comparison = StringComparison.Ordinal;
else if (comparer == StringComparer.OrdinalIgnoreCase)
comparison = StringComparison.OrdinalIgnoreCase;
else
comparison = StringComparison.Ordinal;
if (str.IndexOf(value, comparison) != -1)
return true;
else
return false;
}
}
Строка не имеет метода Contains с этой подписью. str.Contains(chr, StringComparison), а не str.Contains (строка, StringComparison)...
Из вставленного кода вы объявляете переменную "body" типа string и используете другую переменную "bodyText", которая не объявлена.
Я очень опаздываю на эту вечеринку, но надеюсь, что смогу спасти кого-нибудь из дыры, в которой я только что был.
С перегрузкой.net core 2.1 Compare(String, StringComparison)
был доступен. На момент написания этой статьи, если вы используете.NET Framework или более раннюю версию ядра, вам нужно будет использовать другое решение, указанное здесь.
Захват: может ли MSFT сохранить селектор фреймворка в одном месте на странице документации по API? Раньше было вверху и по центру, а фраза "Относится к" вводит в заблуждение.
Вы по-прежнему можете использовать Contains, если сравниваете его после преобразования в тот же регистр (UPPER или ниже).
например:
"samplestring".ToUpper().Contains("SAMPLESTRING")