スティーブは正しいです (しゃれは意図していません): 拡張メソッドは、あなたが求めているものです。C# では、次のようにします。
namespace ExtensionsNamespace; // Name this whatever you want.
public static class ListExtensions // must be public static!
{
// must be public static and the first parameter needs a "this"
public static IList<T> ToOrderedList<T>(this IList<T> originalList, IComparer<T> comparer)
{
// Code to take the original list and return an ordered version
}
}
そして、あなたのコードで:
using ExtensionsNamespace;
...
IComparer<Book> comparer = GetBookComparer();
IList<BooK> books = GetBookList().ToOrderedList(comparer);
特定のケースで独自の比較クラスを作成する必要を回避するために、ラムダ式を使用して実行できる追加のことがいくつかあります。ただし、車輪を再発明する前に、LINQ to Objects を検討することをお勧めします。LINQ to Objects には、これらの機能が多数組み込まれています。たとえば、次のようになります。
using System.Linq;
...
IEnumerable<Book> booksInOrder1 = GetBookList().OrderBy(b => b.Title);
それはあなたの質問に答えていますか?