さまざまなタイプのコレクションがたくさんあり、各コレクションをさまざまなプロパティで並べ替えたいと思います。たとえば、プロパティで IEnumerable<Employee>
並べ替えられName
、プロパティで並べ替えられます。コレクションを並べ替えた後、コレクションをページ付けするために使用します。Age
IEnumerable<Department>
NumberOfEmployees
DepartmentName
PaginatedList
public class PaginatedList<T> : List<T>
{
public PaginatedList(IEnumerable<T> source, Int32 pageIndex, Int32 pageSize , Func<T,Object> orderBy)
{
this.AddRange(source.OrderBy(orderBy).Skip((PageIndex - 1) * PageSize).Take(PageSize));
}
}
OrderBy拡張メソッドに渡されるソートデリゲートである4番目のパラメーターに注意してください。
この4番目の要素を生成するためにジェネリックメソッドを使用しています
public Func<T, Object> SortingFactory<T>(String sortby)
{
switch (typeof(T).ToString())
{
case "Employee":
switch(sortby)
{
case "Name":
return new Func<Employee,String>(delegate(Employee e) { return e.Name; });
break;
case "Age":
return new Func<Employee,Int32>(delegate(Employee e) { return e.Age; });
break;
}
break;
case "Department":
switch(sortby)
{
case "NumberOfEmployees":
return new Func<Department,Int32>(delegate(Department d) { return d.NumberOfEmployees; });
break;
case "DepartmentName":
return new Func<Department,String>(delegate(Department d) { return d.DepartmentName; });
break;
}
break;
}
}
しかし、それは私にコンパイルエラーを与えますCannot implicitly convert type 'System.Func<Employee,String>' to 'System.Func<T,object>'
また、出力をデカールしようとしましたFunc<Object,Object>
が、同じエラーが発生しました。
私が犯した過ちは何ですか、そしてそのような方法はどうですか。