Usint System.Linq
(просто для удовольствия)
var input = new List<int> { -2962, -5787, -1671, -5667, -498, -4463, 1399, 3608, 2173 };
var cross = input
.Zip(input.Skip(1), (a, b) => new []{a,b})
.TakeWhile(t => (t.First() ^ t.Last()) >> 31 == 0)
.SelectMany(_ => _)
.Distinct();
Console.WriteLine(string.Join(",", cross)); //-2962,-5787,-1671,-5667,-498,-4463
Если вам нужен только последний элемент в строке или первый, тогда Aggregate
может работать:
var cross = input.Aggregate((a,b) => (a ^ b) >> 31 == 0 ? a : b); //1399
var cross = input.Aggregate((a,b) => (a ^ b) >> 31 == 0 ? b : a); //-4463