Как использовать 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)

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

bodyText.Contains("software");

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")