如何在搜索时忽略c#中的case

时间:2011-11-06 05:16:25

标签: c# string

我有这个代码搜索列表并返回标题,如果它与搜索词匹配,但目前如果我尝试搜索“测试”,它不会返回结果。如列表所示,是否为“测试”。

请协助。

try
{
    objCurrentWeb = SPContext.Current.Web;
    objSSList = objCurrentWeb.Lists["Sales Materials"];

    foreach (SPListItem objSSListItem in objSSList.Items)
    {
        if (Convert.ToString(objSSListItem["Title"]).Contains(searchWord))
        {
            resultLabel.Text = objSSListItem["Title"].ToString();
        }
    }
}
catch (Exception ex)
{
    resultLabel.Text = ex.Message;
}

5 个答案:

答案 0 :(得分:9)

您可以使用IndexOf检查另一个字符串是否包含在另一个字符串中,然后您可以指定StringComparison方法并告诉它忽略CaseSensitivity。

(Convert.ToString(objSSListItem["Title"])
    .IndexOf(searchWord, StringComparison.InvariantCultureIgnoreCase)) >= 0

为了让它看起来更好更容易调用,请将其作为扩展方法

public static class StringExtender
{
    public static bool Contains(this string s, string str, StringComparison comparer)
    {
        return s.IndexOf(str, comparer) >= 0;
    }
}

答案 1 :(得分:4)

Convert.ToString(objSSListItem["Title"]).ToUpper().Contains(searchWord.ToUpper())

ToLower()

两者都有效。

答案 2 :(得分:3)

另一种选择是使用正则表达式

Regex pattern = new Regex("Arch",RegexOptions.IgnoreCase);
if (pattern.IsMatch("string to search"))
    Console.WriteLine("Match found");

答案 3 :(得分:0)

 if (Convert.ToString(objSSListItem["Title"]).Contains(searchWord, StringComparer.OrdinalIgnoreCase ))

尝试一下,它应该忽略这个案例

答案 4 :(得分:0)

您可以编写自己的比较器! (只需实现IComparer接口!)

更多方法吗?