最初に、この質問のタイトルが意味を成すかどうかはわかりませんが、問題をどのように表現すればよいかわかりません。
次のように定義されたクラスがあります
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)
今、並べ替えたい値がアイテムのフィールドではなく、何らかのメソッドの呼び出しである場合があります
何かのようなもの
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 回呼び出したくない場合を除いて、これは機能します。式の中で一度呼び出す方法はありますか?