tutarlı (örneğin, tek özelliği olarak) projekte anahtarları karşılaştırmak isterseniz, tüm anahtar karşılaştırma kapsüller bir sınıf tanımlayabilirsiniz:
değil, bu eşdeğer olması gereken bir uygulamasıdır kolaylık sağlamak için
public class KeyComparer<TSource, TKey> : Comparer<TSource>
{
private readonly Func<TSource, TKey> _keySelector;
private readonly IComparer<TKey> _innerComparer;
public KeyComparer(
Func<TSource, TKey> keySelector,
IComparer<TKey> innerComparer = null)
{
_keySelector = keySelector;
_innerComparer = innerComparer ?? Comparer<TKey>.Default;
}
public override int Compare(TSource x, TSource y)
{
if (object.ReferenceEquals(x, y))
return 0;
if (x == null)
return -1;
if (y == null)
return 1;
TKey xKey = _keySelector(x);
TKey yKey = _keySelector(y);
return _innerComparer.Compare(xKey, yKey);
}
}
, bir fabrika yöntemini:
belirtilen veya varsayılan iç comparer kullanarak boş çekler, her iki nesneler üzerinde anahtar çıkarımı ve anahtar karşılaştırma dahil sizin için mantık,
public static class KeyComparer
{
public static KeyComparer<TSource, TKey> Create<TSource, TKey>(
Func<TSource, TKey> keySelector,
IComparer<TKey> innerComparer = null)
{
return new KeyComparer<TSource, TKey>(keySelector, innerComparer);
}
}
Sonra şöyle kullanabiliriz:
var sortedSet = new SortedSet<MyClass>(KeyComparer.Create((MyClass o) => o.MyProperty));
Bu uygulamanın genişletilmiş bir tartışma için benim blog post başvurabilir. Burada
Olası cevap: http://stackoverflow.com/questions/9824435/interface-implementing-anonymous-class-in-c –