这是为什么的IndexOf调用返回-1?(Why is this IndexOf call retu

2019-10-18 21:06发布

据我所知,IndexOf返回-1时,未找到该参数,但这没有任何意义了我。

我有这样的代码,遍历所有的DevExpress复选框我的形式,检查,看看他们的标签是什么,并试图找到它在传递给方法的“过滤器”参数。 如果在过滤器中发现的标签,应该检查复选框。 它总是等同于假。

    public void FilterChanged(Control.ControlCollection controls, string filter)
    {
        filter = filter.Replace("[", String.Empty);
        filter = filter.Replace("]", String.Empty);

        foreach (Control control in controls)
        {
            if (control is CheckEdit && control.Tag != null)
            {
                var c = (CheckEdit)control;
                var cFilter = c.Tag.ToString();
                cFilter = cFilter.Replace("(", String.Empty);
                cFilter = cFilter.Replace(")", String.Empty);

                if (filter.ToUpper().IndexOf(c.Tag.ToString().ToUpper()) >= 0)
                    c.Checked = true;
                else
                    c.Checked = false;
            }
        }
    }

我将在我的内心断点IF语句,我立即窗口我输入以下内容:

filter.ToUpper().IndexOf(c.Tag.ToString().ToUpper()) = -1

filter.ToUpper() = “FILE NOT LIKE '%VERSIONINFO.CS%'”

cFilter.ToUpper() = “FILE NOT LIKE '%VERSIONINFO.CS%'”

这些看起来几乎完全一样的东西,所以应该不会是返回0?

我不能用等号,因为过滤器可能包含多个条款,因而不会是平等的。

Answer 1:

cFilter.ToUpper() = "FILE NOT LIKE '%VERSIONINFO.CS%'"

这些看起来几乎完全一样的东西,所以应该不会是返回0?

但是,你正在使用c.Tag.ToString()代替cFilter.ToUpper()

因此,这应该按预期工作:

if (filter.ToUpper().IndexOf(cFilter.ToUpper()) >= 0)
    c.Checked = true;
else
    c.Checked = false;

请注意,您应该使用StringComparison.OrdinalIgnoreCase代替IndexOf

c.Checked = filter.IndexOf(cFilter, StringComparison.OrdinalIgnoreCase) >= 0;


文章来源: Why is this IndexOf call returning -1?