컬렉션 (IEnumerate)을 정렬하기 위해 "MyExtensionSortMethod"확장을 구현했습니다. 이것은 'entities.OrderBy (...) .ThenByDescending (...)'과 같은 코드를 'entities.MyExtensionSortMethod()'(매개 변수 없음)로 대체하도록 허용합니다. 조금 그들이 그 일을 다른 방법이라면 그렇게 내가 궁금해서 무엇에 비해 복잡한 것 같습니다 그러나Reflection to Sort를 사용하는 확장 메서드
//test function
function Test(IEnumerable<ClassA> entitiesA,IEnumerable<ClassB> entitiesB) {
//Sort entitiesA , based on ClassA MySort method
var aSorted = entitiesA.MyExtensionSortMethod();
//Sort entitiesB , based on ClassB MySort method
var bSorted = entitiesB.MyExtensionSortMethod();
}
//Class A definition
public classA: IMySort<classA> {
....
public IEnumerable<classA> MySort(IEnumerable<classA> entities)
{
return entities.OrderBy(...).ThenBy(...);
}
}
public classB: IMySort<classB> {
....
public IEnumerable<classB> MySort(IEnumerable<classB> entities)
{
return entities.OrderByDescending(...).ThenBy(...).ThenBy(...);
}
}
//extension method
public static IEnumerable<T> MyExtensionSortMethod<T>(this IEnumerable<T> e) where T : IMySort<T>, new()
{
//the extension should call MySort of T
Type t = typeof(T);
var methodInfo = t.GetMethod("MySort");
//invoke MySort
var result = methodInfo.Invoke(new T(), new object[] {e});
//Return
return (IEnumerable <T>)result;
}
public interface IMySort<TEntity> where TEntity : class
{
IEnumerable<TEntity> MySort(IEnumerable<TEntity> entities);
}
: 여기
구현의 샘플입니다?
개체 정렬 : 그것을 수행하는 방법에 대해 설명의 다음 문서를 참조하십시오? 당신의 모든 엔티티 클래스가 그 타입의 정렬 콜렉션을 완전히 캡슐화하는 자신의'MySort' 메소드를 가지고 있다면, 왜 직접 호출하지 않을까요? 확장 방법의 목적은 무엇입니까? –
각 엔티티에는 MySort 메소드가 있습니다. 그러나 수집은 아닙니다. 어쩌면 내가 뭔가를 놓친 것일 수도 있지만 다른 방법을 모른다. –
그래서'MySort'를 정적으로 만들고,'IEnumerable'을 가지고 있다면'ClassA.MySort'를 호출하고,'IEnumerable '를 가지고 있다면'ClassB.MySOrt'를 호출하십시오. –