Если вы используете LINQ to Objects и список длинный, я бы использовал:
List<int> list = new List<int> { 2, 5, 7, 10 };
int number = 9;
int closest = list.Aggregate((x,y) => Math.Abs(x-number) < Math.Abs(y-number) ? x : y);
Этот метод немного сложнее, чем решение, предложенное Энтони Пеграмом, но имеет то преимущество, что вам не нужно сначала сортировать список. Это означает, что у вас временная сложность O(n)
вместо O(n*log(n))
и использование памяти O(1)
вместо O(n)
.