0

我有一个过滤列表框结果的文本框,如果我输入它全部大写,它不会返回任何内容,但都会降低。我想看看我是否错过了什么。这是我正在使用的。

谢谢

private void Filter(object sender, FilterEventArgs e)
{

    var src = e.Item as Users;
    if (src == null)
        e.Accepted = false;
    //else if (src.Name!= null && !src.Name.Contains(Search))
    else if (src.Name!= null && !src.Name.ToLower().Contains(Search))
        e.Accepted = false;
}
4

2 回答 2

2

也将您的搜索更改为小写

        else if (src.Name!= null && !src.Name.ToLower().Contains(Search.ToLower()))
            e.Accepted = false;
于 2013-04-09T21:32:01.180 回答
2

内部string.Contains是使用IndexOfOrdinalCompare枚举实现的。
因此,您的代码可以更改为使用简单的代码,而不会产生返回原始字符串新副本的方法IndexOf所需的惩罚。ToLower

if (src == null || string.IsNullOrEmpty(src.Name))
    e.Accepted = false;
else if (src.Name.IndexOf(Search, StringComparison.CurrentCultureIgnoreCase) < 0)
    e.Accepted = false;

字符串是不可变的,这意味着一旦创建就不能更改字符串。
像这样的方法ToLower实际上创建了一个新的字符串对象来保存新的小写字符序列,并返回该新对象。

于 2013-04-09T21:40:48.400 回答