[英]How to use a custom comparer for EqualityComparer<T>.Default?
[英]Comparer<T>.Default Property
這個問題來自於這個小奇跡: Comparer<T>.Default
。 Comparer<T>.Default
。 我想知道作者寫的是什么:
如果要比較的類型已實現
IComparable<T>
或者類型為System.Nullable<T>
,其中T實現IComparable
,則System.Collections.Generic命名空間中有一個名為Comparer<T>
,它暴露了一個屬性調用Default,它將創建一個單例,表示該類型項的默認比較器。
例如:
我有一節課:
class Foo : IComparable<Foo> { ... }
public class FooComparer : IComparer<Foo> { ... }
Comparer類實現為public abstract class Comparer<T> : IComparer, IComparer<T>
。 我的問題是Default Property的整體運作方式,它的作用以及它是如何工作的?
謝謝
Comparer<T>.Default
不使用您的FooComparer
類。 它只返回內部類GenericComparer<T>
的實例。
這個類具有T
必須實現IComparable<T>
的約束,因此它可以簡單地將調用委托給它Compare
方法來傳遞它傳遞的實例的Compare
方法。
像這樣的東西:
internal class GenericComparer<T> : Comparer<T> where T : IComparable<T>
{
public override int Compare(T x, T y)
{
if (x != null)
{
if (y != null)
return x.CompareTo(y);
return 1;
}
else
{
if (y != null)
return -1;
return 0;
}
}
// ...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.