私は、多くのファーストクラスのコレクションを持つコード ベースで作業しています。
これらのコレクションを LINQ で使いやすくするために、次のようなコレクションごとの拡張メソッドがあります。
public static class CustomCollectionExtensions
{
public static CustomCollection ToCustomCollection(this IEnumerable<CustomItem> enumerable)
{
return new CustomCollection(enumerable);
}
}
付随するコンストラクターを使用すると、次のようになります。
public class CustomCollection : List<CustomItem>
{
public CustomCollection(IEnumerable<CustomItem> enumerable) : base(enumerable) { }
}
IEnumerable<U>.To<T>()
これはボイラープレートの束になってしまうため、これらの特定の ToXCollection() メソッドを生成し続ける必要がないようにジェネリックを作成しようとしました。
私は限りました:
public static class GenericCollectionExtensions
{
public static T To<T, U>(this IEnumerable<U> enumerable) where T : ICollection<U>, new()
{
T collection = new T();
foreach (U u in enumerable)
{
collection.Add(u);
}
return collection;
}
}
次のように呼び出す必要がありますcustomCollectionInstance.OrderBy(i => i.Property).To<CustomCollection, CustomItem>()
CustomItem
代わりに使用できるように型を指定する必要を回避する方法はありますか、customCollectionInstance.OrderBy(i => i.Property).To<CustomCollection>()
それとも一般的に実行できるものではありませんか?