Сначала позвольте мне сказать, что я не уверен, имеет ли смысл этот вопрос какой-либо смысл, но я не уверен, как сформулировать мою проблему.
У меня есть класс, определенный как
public static class NaturalSort<T>
У этого класса есть метод
public static IEnumerable<T> Sort(IEnumerable<T> list, Func<T, String> field)
По сути, он выполняет естественную сортировку по некоторому списку, учитывая Func, который возвращает значение для сортировки.Я использовал это для всего, что я хочу сделать естественной сортировкой.
Обычно я делал бы что-то вроде
sorted = NaturalSort<Thing>.sort(itemList, item => item.StringValueToSortOn)
Теперь у меня есть случай, когда значение, которое я хочуsort - это не поле элемента, а вызов некоторого метода
Что-то вроде
sorted = NaturalSort<Thing>.sort(itemList, item => getValue(item))
Что теперь, если я getValue возвращает объект вместо строки.и мне нужно сделать некоторую условную логику, чтобы добраться до моего строкового значения
sorted = NaturalSort<Thing>.sort(itemList, item => getValue(item).Something == null ? getValue(item).SomethingElse : getValue(item).SomeotherThing)
Это будет работать, за исключением того, что вызов getValue стоит дорого, и я не хочу вызывать его 3 раза.Есть ли способ, как я могу назвать это однажды внутри выражения?