IEqualityComparer для анонимного типа

Это не программное обеспечение, но я часто смотрю Tekzilla подкасты. Любите меня некоторая Veronica Belmont / Patrick Norton!

кроме того, все другие уже упомянутые - Переполнение стека, TWiT, и т.д.

33
задан DOK 1 February 2011 в 14:10
поделиться

2 ответа

Уловка состоит в том, чтобы создать средство сравнения, которое работает только с предполагаемыми типами. Например:

public class Comparer<T> : IComparer<T> {
  private Func<T,T,int> _func;
  public Comparer(Func<T,T,int> func) {
    _func = func;
  }
  public int Compare(T x,  T y ) {
    return _func(x,y);
  }
}

public static class Comparer {
  public static Comparer<T> Create<T>(Func<T,T,int> func){ 
    return new Comparer<T>(func);
  }
  public static Comparer<T> CreateComparerForElements<T>(this IEnumerable<T> enumerable, Func<T,T,int> func) {
    return new Comparer<T>(func);
  }
}

Теперь я могу сделать следующее ... хакерское решение:

var comp = n.CreateComparerForElements((x, y) => x.Vchr == y.Vchr);
19
ответ дан 27 November 2019 в 19:33
поделиться

В большинстве случаев при сравнении (на равенство или сортировку) вас интересует выбор ключей для сравнения, а не сам метод равенства или сравнения (это идея, лежащая в основе списка Python sort API).

Здесь есть пример сравнения ключевого равенства .

3
ответ дан 27 November 2019 в 19:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: