Как использовать StringComparison для строк в C#?
string body = Selenium.GetBodyText();
if (body.Contains("software", StringComparison.CurrentCultureIgnoreCase))
{
//do something
}
Я string does not contain a definition for Contains
сообщение, когда я делаю выше. Что я здесь делаю не так? Заранее всем спасибо!
Я пытаюсь проверить, имеет ли тело строку "программное обеспечение", "Программное обеспечение"или" программное обеспечение". тело будет содержать абзацы и абзацы текста (строки).
9 ответов
вы можете использовать регулярное выражение для поиска строк в C#. У вас также есть возможность игнорировать регистр.
if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
эта ссылка может быть полезной: как: поиск строк с использованием регулярных выражений (руководство по программированию на C#)
Я не уверен, используете ли вы .NET 1.1, но он не содержит метода Contains
. Вы должны использовать IndexOf
. .NET 2.0 добавил метод содержит (на MSDN). С IndexOf, вы можете использовать StringComparison.
Я не верю string
есть перегрузка Contains
взяв StringComparison
. Однако вы можете использовать IndexOf
что значит:
if (body.IndexOf("software", StringComparison.CurrentCultureIgnoreCase) != -1)
Contains
имеет только один параметр - строку, это сравнение. Вы имели в виду,Equals
что надо StringComparison
?
из кода, который был вставлен, вы объявляете переменную "тело" типа string и используете другую переменную "bodyText", которая не объявлена.
String не имеет метода Contains с этой сигнатурой. ул.Содержит (chr, StringComparison), а не str.Содержит(строка, значение 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 при условии, что вы сравните его после преобразования в тот же случай(верхний или нижний)
например:
"samplestring".ToUpper().Contains("SAMPLESTRING")