Это то, что вы можете сделать с помощью System.Linq:
var value = arrayOfThings
.OrderByDescending(x => somefunction(x.property, localvariable))
.First();
Если массив может быть пустым, используйте .FirstOrDefault();
, чтобы избежать исключений.
Вы действительно не знаетекак это реализовано внутри, так что вы не можете быть уверены, что это отсортирует весь массив, чтобы получить первый элемент.Например, если бы это было linq to sql, сервер получил бы запрос, включающий сортировку и условие.Он не получит массив, затем отсортирует его, затем получит первый элемент.
На самом деле, пока вы не вызовете First, первая часть запроса не будет оценена.Я имею в виду, что это не оценка в два этапа, а оценка в один шаг.
var sortedValues =arrayOfThings
.OrderByDescending(x => somefunction(x.property, localvariable));
// values isn't still evaluated
var value = sortedvalues.First();
// the whole expression is evaluated at this point.