Mit freundlicher Genehmigung von Reflector:
%Vor% Wie Sie sehen können, wenn T = string, gibt es GenericEqualityComparer<string>
zurück.
EqualityComparer<T>.Default
funktioniert durch Aufrufen der virtual
-Methoden Equals(object)
und GetHashCode()
, die durch System.Object
definiert sind, aber möglicherweise von T
überschrieben werden.
Beachten Sie, dass, da die Metoden virtual
sind, eine Implementierung einer abgeleiteten Klasse als T
verwendet werden kann. Zum Beispiel:
gibt true
zurück, auch wenn
und
%Vor% beide geben false
zurück.
Wenn T
% string
ist, überlädt die Klasse System.String
die beiden fraglichen Methoden und verwendet einen ordinalen Vergleich. In diesem Fall sollte es also System.StringComparer.Ordinal
entsprechen. Und natürlich ist string
eine sealed
-Klasse, also könnte keine andere Klasse von string
abgeleitet werden und Equals
und GetHashCode
auf eine seltsame Weise überschreiben.
Tags und Links c#