如何在C#中对字符串使用StringComparison?

时间:2011-07-28 13:53:14

标签: c# string-comparison ignore-case

string body = Selenium.GetBodyText();

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

当我执行上述操作时,我收到string does not contain a definition for Contains消息。我在这做错了什么?提前谢谢大家!

我正在尝试检查主体是否有字符串“software”,“Software”或“SOFTWARE”。 body将包含文本的段落和段落(字符串)。

10 个答案:

答案 0 :(得分:9)

我不相信string的{​​{3}}超载StringComparison。但是,您可以使用IndexOf Contains

if (body.IndexOf("software", StringComparison.CurrentCultureIgnoreCase) != -1)

答案 1 :(得分:7)

我不确定您是否使用.NET 1.1,但它不包含方法Contains。您必须使用IndexOf。 .NET 2.0添加了方法Contains (per MSDN)。使用IndexOf, you can use StringComparison

答案 2 :(得分:5)

您可以使用正则表达式匹配C#中的字符串搜索。您还可以选择忽略大小写。

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

此链接可能有用:How to: Search Strings Using Regular Expressions (C# Programming Guide)

答案 3 :(得分:3)

String.Contains只接受一个参数 - 你的代码应该是

bodyText.Contains("software");

答案 4 :(得分:2)

Contains只有一个参数 - 它与之比较的字符串。您的意思是,Equals确实需要StringComparison吗?

答案 5 :(得分:1)

从已粘贴的代码中,您将声明一个字符串类型的变量“body”,并使用另一个未声明的变量“bodyText”。

答案 6 :(得分:1)

String没有包含该签名的Contains方法。 str.Contains(chr,StringComparison),而不是str.Contains(string,StringComparison)......

答案 7 :(得分:1)

你可以随时制作扩展方法(如果你使用的是.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;
    }
}

答案 8 :(得分:0)

您仍然可以使用包含,只要在将其转换为相同的大小写(UPPER或更低)

后进行比较

例如:

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

答案 9 :(得分:0)

我参加这个聚会很晚了,但是希望我可以从刚参加的会议中救出一个人。

使用.net core 2.1,重载Compare(String, StringComparison)可用。在撰写本文时,如果您使用的是.net Framework或更早版本的core,则需要使用此处列出的其他解决方案。

抓地力:MSFT是否可以将框架选择器放在api docs page上的某个位置?过去一直居于首位,居中,“适用于”很容易引起误解。