パラメータが見つからない場合、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 にはなりません。