Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么这个IndexOf调用返回-1?_C#_String_Winforms_.net 3.5 - Fatal编程技术网

C# 为什么这个IndexOf调用返回-1?

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("

我知道IndexOf在找不到参数时返回-1,但这对我来说没有意义

我有一段代码,它遍历表单上的所有DevExpress复选框,检查它们的标记是什么,并尝试在传递给该方法的“filter”参数中找到它。如果在过滤器中找到标记,则应选中该复选框。它总是等同于虚假

    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