IndexOf проверяет ссылку, поэтому, если элементы в otherListOfMyObjects не ссылаются на те же точные объекты в памяти, что и myListBox.Items, то IndexOf не будет работать.
Что вы можете сделать, это использовать linq. Вот некоторый псевдокод, который выглядит как C #, может компилироваться и действительно работать:
var items = from x in myListBox.Items where otherListOfMyObjects.Any(y => y == x /*SEE NOTE*/) select x;
foreach(item i in items)
myListBox.SelectedItems.Add(i);
Очевидно, что это не сработает, так как y == x всегда будет возвращать false (вот почему ваш текущий метод не будет работать). Вам нужно заменить y == x, чтобы выполнить сравнение на равенство, которое определит равенство, как ВЫ определяете его для MyObject. Вы можете сделать это, добавив идентификатор, как предложил Fallen, или переопределив набор методов, как предложил Neil (+ s для них обоих), или просто определив, какие свойства MyObject следует проверять, чтобы идентифицировать их как точно один и тот же объект. .