C# 为什么这个IndexOf调用返回-1?
我知道IndexOf在找不到参数时返回-1,但这对我来说没有意义 我有一段代码,它遍历表单上的所有DevExpress复选框,检查它们的标记是什么,并尝试在传递给该方法的“filter”参数中找到它。如果在过滤器中找到标记,则应选中该复选框。它总是等同于虚假C# 为什么这个IndexOf调用返回-1?,c#,string,winforms,.net-3.5,C#,String,Winforms,.net 3.5,我知道IndexOf在找不到参数时返回-1,但这对我来说没有意义 我有一段代码,它遍历表单上的所有DevExpress复选框,检查它们的标记是什么,并尝试在传递给该方法的“filter”参数中找到它。如果在过滤器中找到标记,则应选中该复选框。它总是等同于虚假 public void FilterChanged(Control.ControlCollection controls, string filter) { filter = filter.Replace("
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()
这些看起来几乎完全一样,所以它不应该返回0吗
我不能使用equals,因为筛选器可能包含多个子句,因此不相等
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
这些看起来几乎完全一样,所以它不应该返回0吗
但是您使用的是c.Tag.ToString()
而不是cFilter.ToUpper()
因此,这应该如预期的那样起作用:
if (filter.ToUpper().IndexOf(cFilter.ToUpper()) >= 0)
c.Checked = true;
else
c.Checked = false;
请注意,在中应该使用StringComparison.OrdinalIgnoreCase
您使用的是c.Tag.ToString()
而不是cFilter.ToUpper()
stringcomparison.ordinallingorecase
@TimSchmelter,这就是问题所在,将其作为答案发布:)顺便说一句,您可以使用c.Checked=filter.ToUpper().IndexOf(cFilter.ToUpper())>=0
而不是if...else您使用的是c.Tag.ToString()
而不是cFilter.ToUpper()
stringcomparison.OrdinalIgnoreCase
@TimSchmelter这就是问题所在,将其作为答案发布:)顺便说一句,您可以使用c.Checked=filter.ToUpper().IndexOf(cFilter.ToUpper())>=0而不是if..else