正解です。C#はJavaとは異なり、インターフェイスを実装できる匿名の内部クラスの概念をサポートしていません。私はとまったく同じ問題に遭遇しIEqualityComparer
、最終的に次の解決策に到達しました。
public static class Utils {
private sealed class EqualityComparer<T> : IEqualityComparer<T> {
private readonly Func<T, T, bool> m_equals;
private readonly Func<T, int> m_getHashCode;
internal EqualityComparer(
Func<T, T, bool> equals,
Func<T, int> getHashCode) {
m_equals = equals;
m_getHashCode = getHashCode;
}
public bool Equals(T left, T right) {
return m_equals(left, right);
}
public int GetHashCode(T value) {
return m_getHasheCode(value);
}
}
public static IEqualityComparer<T> CreateEqualityComparer<T>(
Func<T, T, bool> equals,
Func<T, int> getHashCode) {
return new EqualityComparer<T>(equals, getHashCode);
}
}
今、私がその場で欲しい場所で、IEqualityComparer<T>
私はただ次のことをすることができます
var comparer = Utils.CreateEqualityComparer<Student>(
(left, right) => left.Name == right.Name,
value => value.Name.GetHashCode());