EDIT: Have adjusted the queries below to convert to using long
arithmetic, so that we avoid overflow issues.
I would probably use MoreLINQ‘s MinBy
method:
var nearest = array.MinBy(x => Math.Abs((long) x - targetNumber));
Or you could just use:
var nearest = array.OrderBy(x => Math.Abs((long) x - targetNumber)).First();
… but that will sort the whole collection, which you really don’t need. It won’t make much difference for a small array, admittedly… but it just doesn’t feel quite right, compared with describing what you’re actually trying to do: find the element with the minimum value according to some function.
Note that both of these will fail if the array is empty, so you should check for that first.