我知道 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()
= "文件不像'%VERSIONINFO.CS%'"
cFilter.ToUpper()
= "文件不像'%VERSIONINFO.CS%'"
这些看起来几乎完全相同,所以它不应该返回 0 吗?
我不能使用equals,因为过滤器可能包含多个子句,因此不相等。