Bei der Umsetzung IEqualityComparer<Product>
(Product
ist eine Klasse), klagt ReSharper, dass die Nullprüfung unter immer falsch ist:Bei der Implementierung von IEqualityComparer sollte GetHashCode auf Null überprüfen?
public int GetHashCode(Product product)
{
// Check whether the object is null.
if (Object.ReferenceEquals(product, null))
return 0;
// ... other stuff ...
}
(Code-Beispiel aus MSDN VS.9 documentation of Enumerable.Except)
ReSharper falsch sein kann, aber wenn für eine Suche Antwort kam ich die official documentation for IEqualityComparer<T>
über denen ein Beispiel hat, wo null für nicht aktiviert ist:
public int GetHashCode(Box bx)
{
int hCode = bx.Height^bx.Length^bx.Width;
return hCode.GetHashCode();
}
Zusätzlich die Dokumentation GetHashCode()
states dass ArgumentNullException
wird geworfen, wenn "Der Typ von Obj ist ein Referenztyp und Obj ist Null."
Also, bei der Implementierung IEqualityComparer
sollte GetHashCode
auf Null überprüfen, und wenn ja, was sollte es mit Null tun (eine Ausnahme werfen oder einen Wert zurückgeben)?
Ich interessiere mich am meisten in .NET Framework offizielle Dokumentation, die die eine oder andere Weise angibt, wenn Null überprüft werden sollte.
Natürlich ist das "richtige Ding" [zur Debatte] (http://stackoverflow.com/questions/10723458/should-the-hash-code-of-null-always-be-zero-in-net)? rq = 1) wenn Sie bedenken, dass in der Dokumentation angegeben wird, dass eine 'ArgumentNullExpection' ausgelöst werden soll, aber .NET integrierte Klassen nicht wirklich auf Null setzen. – FriendlyGuy