문제

여러 기준으로 목록을 정렬하려면 현재 다음과 같은 작업을 수행하고 있습니다.

collection.Sort((f1, f2) =>
{
    var comp = f1.FirstCriteria.CompareTo(f2.FirstCriteria);
    return comp != 0 ? comp : f1.SecondCriteria.CompareTo(f2. SecondCriteria);
});

그러나 다음과 같은 일을 할 수 있다는 것은 좋지 않을 것입니다.

collection.MultipleSort(f1.FirstCriteria, f2.FirstCriteria)
          .Then(f1.SecondCriteria, f2.SecondCriteria)

정렬을위한 유창한 인터페이스를 잘 구현하기위한 아이디어가 있습니까?

도움이 되었습니까?

해결책

다음과 같은 것을 의미합니까?

using System.Linq;

collection.OrderBy(t => t.FirstCriteria).ThenBy(t => t.SecondCriteria);

다른 팁

여기서 문제는 당신이하고 싶은 것처럼 들린다는 것입니다. 제자리에 종류; 이 경우 조건 추가를 완료했을 때 (유창한 API와 함께) 알아야합니다. 이것은 LINQ 접근법과 대조됩니다. 이는 연기 된 실행을 사용하기 때문입니다.

단일 조건 정렬의 경우 다음과 같은 것을 사용할 수 있습니다.

public static void Sort<TSource, TValue>(this List<TSource> source,
        Func<TSource, TValue> selector) {
    var comparer = Comparer<TValue>.Default;
    source.Sort((x,y)=>comparer.Compare(selector(x),selector(y)));
}
public static void SortDescending<TSource, TValue>(this List<TSource> source,
        Func<TSource, TValue> selector) {
    var comparer = Comparer<TValue>.Default;
    source.Sort((x,y)=>comparer.Compare(selector(y),selector(x)));
}

여러 종류의 경우 더 어려울 것입니다. 당신은 사용할 수 없습니다 params 각각 TValue 다를 수 있습니다. 터미네이터 단계와 중개자 "빌더"클래스 (본질적으로 DSL을 작성)를 사용해야하거나 비교를 먼저 구축해야 할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top