- 1
 - 2
 - 3
 - 4
 - 5
 - 6
 - 7
 - 8
 
private List<Ball> _balls;
private Interaction GetInteraction(Ball ball) {
  foreach (var b2 in _balls.SkipWhile(b => b != ball).Skip(1)) {
      /* ... */
  }
}
var table = _balls.Select(GetInteraction);
                                Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+129
private List<Ball> _balls;
private Interaction GetInteraction(Ball ball) {
  foreach (var b2 in _balls.SkipWhile(b => b != ball).Skip(1)) {
      /* ... */
  }
}
var table = _balls.Select(GetInteraction);
                                
            Откопал в своей проге.
нужно было определить, какой шарик с кем взаимодействует раньше всего, притом если уже рассчитано взаимодействие 1 и 2 шарика (при рассчёте взаимодействий 1 и 2, 1 и 3, 1 и 4, ... и выделено самое раннее взяимодействие шарика 1), то взимодействие 2 и 1 рассчитываеть не надо. Таким образом, нужно было пройти все пары шариков так, чтоб первый встретился в списке раньше второго.
Массивы, индексы и циклы? Не, не знаем такого. Только Select, только ФП, только колдовство со SkipWhile(b => b!=ball).Skip(1).
        
> там есть финальный return
Путаемся в показаниях? :)
Вот return после foreach есть, потому и компилируется. Или в шарпе та же срань, что и в сишке\крестах: пропущенный return всего лишь ворнинг?