Как использовать StringComparison для строк в C #? - PullRequest
8 голосов
/ 28 июля 2011
string body = Selenium.GetBodyText();

if (body.Contains("software", StringComparison.CurrentCultureIgnoreCase))
{
   //do something
}

Когда я делаю выше, я получаю сообщение string does not contain a definition for Contains. Что я здесь не так делаю? Спасибо всем заранее!

Я пытаюсь проверить, есть ли в теле строка "software", "Software" или "SOFTWARE". Тело будет содержать абзацы и абзацы текста (строки).

Ответы [ 9 ]

9 голосов
/ 28 июля 2011

Я не верю, что string имеет перегрузку Contains, принимая StringComparison. Однако вы можете использовать IndexOf , что делает :

if (body.IndexOf("software", StringComparison.CurrentCultureIgnoreCase) != -1)
7 голосов
/ 28 июля 2011

Я не уверен, используете ли вы .NET 1.1, но он не содержал метод Contains. Вы должны использовать IndexOf. В .NET 2.0 добавлен метод Содержит (для MSDN) . С IndexOf вы можете использовать StringComparison .

5 голосов
/ 28 июля 2011

Вы можете использовать регулярное выражение для поиска строки в C #.У вас также есть возможность игнорировать регистр.

if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))

Эта ссылка может быть полезна: Как выполнить поиск строк с помощью регулярных выражений (Руководство по программированию в C #)

3 голосов
/ 28 июля 2011

String. Содержит только один параметр - ваш код должен быть

bodyText.Contains("software");
2 голосов
/ 28 июля 2011

Contains имеет только один параметр - строку, с которой он сравнивает. Вы имели в виду Equals, который действительно StringComparison?

1 голос
/ 16 октября 2013

Ну, вы всегда можете сделать метод расширения (если вы используете .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;
    }
}
1 голос
/ 28 июля 2011

Строка не имеет метода Contains с этой подписью. str.Contains (chr, StringComparison), не str.Contains (строка, StringComparison) ...

1 голос
/ 28 июля 2011

В коде, который был вставлен, вы объявляете переменную "body" типа string и используете другую переменную "bodyText", которая не объявлена.

0 голосов
/ 28 июля 2011

Вы по-прежнему можете использовать Contains при условии, что вы сравните его после преобразования в тот же регистр (UPPER или ниже)

например:

"samplestring".ToUpper().Contains("SAMPLESTRING")
...