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

如何对C#中的字符串使用StringComparison?,c#,string-comparison,ignore-case,C#,String Comparison,Ignore Case,当我执行上述操作时,我得到的字符串不包含Contains消息的定义。我做错了什么?提前谢谢大家 我试图检查身体是否有字符串“软件”,“软件”或“软件”。正文将包含段落和段落文本(字符串) 我不确定您是否正在使用.NET 1.1,但它没有包含方法Contains。您必须使用IndexOf。NET2.0添加了该方法。使用。我不认为string有过多的StringComparison。但是,您可以使用索引of: 从粘贴的代码中,您声明了一个字符串类型的变量“body”,并使用了另一个未声明的变量“bo

当我执行上述操作时,我得到的
字符串不包含Contains
消息的定义。我做错了什么?提前谢谢大家


我试图检查身体是否有字符串“软件”,“软件”或“软件”。正文将包含段落和段落文本(字符串)

我不确定您是否正在使用.NET 1.1,但它没有包含方法
Contains
。您必须使用
IndexOf
。NET2.0添加了该方法。使用。

我不认为
string
有过多的
StringComparison
。但是,您可以使用
索引of


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

字符串没有带有该签名的Contains方法。str.Contains(chr,StringComparison),而不是str.Contains(string,StringComparison).

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

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

Contains
只有一个参数—它所比较的字符串。您的意思是说,
等于
,它需要进行
StringComparison

如果将其转换为相同大小写(大写或小写)进行比较,您仍然可以使用Contains

例如:


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

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

此链接可能很有用:

您可以随时创建扩展方法(如果您使用的是.Net 3.5或更高版本):

公共静态类StringExtensions
{
/// 
///返回一个值,该值指示指定的字符串对象
///在此字符串中发生。
/// 
///正在扩展的字符串对象
///要检查的字符串对象
///要使用的字符串比较器
公共静态bool包含(此字符串str、字符串值、字符串比较器)
{
比较;
if(comparer==StringComparer.CurrentCulture)
比较=StringComparison.CurrentCulture;
else if(comparer==StringComparer.CurrentCultureInoRecase)
comparison=StringComparison.CurrentCultureInogoreCase;
else if(comparer==StringComparer.InvariantCulture)
比较=StringComparison.InvariantCulture;
else if(comparer==StringComparer.InvariantCultureInogoreCase)
比较=StringComparison.InvariantCultureInogoreCase;
else if(comparer==StringComparer.Ordinal)
比较=StringComparison.Ordinal;
else if(comparer==StringComparer.OrdinalIgnoreCase)
比较=StringComparison.OrdinalIgnoreCase;
其他的
比较=StringComparison.Ordinal;
if(str.IndexOf(值,比较)!=-1)
返回true;
其他的
返回false;
}
}

我参加这个聚会已经很晚了,但希望我能从刚才的困境中救出一个人

随着.NETCore2.1重载
Compare(String,StringComparison)
可用。在撰写本文时,如果您使用的是.NETFramework或更早版本的core,则需要使用此处列出的不同解决方案


Grip:MSFT能否将框架选择器保留在屏幕上的一个位置?以前是顶部和中间,“应用于”是非常误导的。

您有字符串body,然后使用bodyText,如果不是打字错误,请发布bodyTextoops声明…抱歉…这是一个错误。让我来解决这个问题。错误消息不是表明他正在使用一个旧的框架吗?如果方法签名错误,则错误消息似乎会有所不同。@0A0D:这一点很好-应该是“方法包含2个参数,因此没有重载”。我想我们会看到Maya所说的:)@Maya另一种可能是使用上面的代码使用扩展方法扩展
String
类。你实际上是在制造你自己的过载。@Maya:对不起,Maya,我希望你没有被冒犯。它的意思是一般性。body是一个字符串,当我使用body.Contains时,我看到3个重载-一个使用char,另一个使用字符串,最后一个使用StringComparison使用char。你说得对,乔恩。谢谢我不知道如何检查我使用的框架的版本。我将尝试使用IndexOf。这不是一个好主意,因为一些文化处理上壳的方式。例如,
“mail”.ToUpper().Contains(“mail”)
可能不会返回true.Thank skeet.not think。将参数也转换为大写并进行比较如何。(“samplestring.ToUpper().Contains”(“samplestring.ToUpper()))我甚至不确定这是否有效。就我所知,基本上执行不区分大小写的匹配不应该涉及转换。
bodyText.Contains("software");
"samplestring".ToUpper().Contains("SAMPLESTRING")
if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
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;
    }
}