Wie ist diese Überladungsauflösung sinnvoll?

8

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:

%Vor%

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:

%Vor%

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:

%Vor%

aber das änderte nichts am Verstand des Compilers ... ich frage mich warum nicht.)

    
Qwertie 11.04.2013, 07:17
quelle

1 Antwort

2

Um eine Lösung für das Problem zu finden (siehe auch Kommentar):

%Vor%     
leppie 11.04.2013, 07:33
quelle

Tags und Links