Как использовать 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")
Другие вопросы по тегам