1

パラメータが見つからない場合、IndexOf が -1 を返すことは理解していますが、これは意味がありません。

フォームのすべての DevExpress チェックボックスを反復処理し、タグが何であるかを確認し、メソッドに渡された「フィルター」パラメーターでそれを見つけようとするこのコードがあります。タグがフィルターで見つかった場合は、そのチェックボックスをオンにする必要があります。これは常に false と同等です。

    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 は使用できず、equals にはなりません。

4

1 に答える 1

8
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;
于 2013-10-30T13:19:15.773 に答える