Ich hatte gerade einen Komponententest aus einem seltsamen Grund, der IDictionary<object, object>
betrifft, fehlgeschlagen.
IDictionary<K,V>
hat zwei Remove
-Methoden. Einer nimmt einen K
, der andere einen KeyValuePair<K,V>
. Betrachten Sie diese zwei Wörterbücher:
Die Ausgabe ist True
, dann False
. Da KeyValuePair<object,object>
genau der Typ ist, der von d2.Remove(KeyValuePair<object,object>)
erwartet wird, warum ruft der Compiler stattdessen d2.Remove(object)
auf?
( Nachbericht:
In dem Szenario, das zu meiner Frage geführt hat, habe ich IDictionary<object,object>
nicht direkt, sondern über einen generischen Parameter verwendet:
Da das Problem darin besteht, dass IDictionary
Priorität vor ICollection
hat, habe ich mich entschieden, "Dinge aus der Reihe zu bringen", indem ich ICollection
in die Liste der Einschränkungen einbeziehe:
aber das änderte nichts am Verstand des Compilers ... ich frage mich warum nicht.)
Tags und Links c# method-overloading