C # params Schlüsselwort mit zwei Parametern des gleichen Typs

8

Ich habe heute etwas mit C # gefunden, an das ich vorher nicht gedacht hatte. Ich habe zwei Methoden in meiner Klasse, eine eine Überlastung der anderen. Sie werden wie folgt erklärt:

%Vor%

In meinem Code habe ich versucht, den ersten wie folgt zu nennen:

%Vor%

... erwarte, dass es die erste Überladung aufruft. Nun, es hieß die zweite Überladung. Die einzige Möglichkeit, die erste Methode in diesem Fall aufzurufen, besteht darin, ein string [] - Objekt wie folgt manuell zu übergeben:

%Vor%

Dieses Verhalten verwirrt mich nicht, weil ich weiß, dass der Compiler aufgrund meiner Parameter nicht sagen kann, welche Methode ich eigentlich aufrufen wollte. Aber ich war nicht vorsichtig, das hätte in meinem Code unbemerkt bleiben können. Es scheint, als ob Microsoft den Compiler einen Fehler auslösen lassen sollte, wenn eine Situation wie oben aufgetreten ist. Hat jemand darüber irgendwelche Gedanken? Gibt es eine andere Möglichkeit, die erste Überladung als die von mir gepostete "Lösung" aufzurufen?

    
Andy 25.09.2009, 20:15
quelle

5 Antworten

7

Wenn ich Adam zustimme, würde ich es so ändern:

%Vor%     
scottm 25.09.2009 20:31
quelle
7

Persönlich würde ich es so machen:

%Vor%

Die Leute verlieben sich manchmal in Überladung, und wenn Sie das mit einer Liebe für das params -Schlüsselwort kombinieren, erhöhen Sie nur die Verwirrungsebene für den, der schließlich Ihren Code übernehmen muss.

    
MusiGenesis 25.09.2009 21:01
quelle
3

Es sieht so aus, als gäbe es keinen anderen Weg.

Sie finden eine Erklärung zu diesem Verhalten in C # spec Ссылка und hier Ссылка (Absatz 2)

  

Ein Parameter-Array entspricht genau einem Wert-Parameter (§ 17.5.1.1) desselben Typs.

und

  

Die erweiterte Form einer Methode ist nur verfügbar, wenn die normale Form der Methode dies nicht ist   anwendbar und nur dann, wenn eine Methode mit der gleichen Signatur wie das erweiterte Formular nicht bereits vorhanden ist   im selben Typ deklariert

    
Andrey Taptunov 25.09.2009 21:11
quelle
2

Ja, ich stimme zu, dass es wahrscheinlich eine Warnung sein sollte, wenn die Verwendung von Array-Arrays mit variabler Länge eine mehrdeutige Überladung verursacht - es ist sehr viel ein Randfall, und die Leute wollen fast sicher nicht solche Situationen erzeugen.

Ich weiß auch nicht anders, als dass Sie gepostet haben, um die Anrufauflösung zu vermeiden, die auftritt - anders als zu vermeiden, es überhaupt zu tun, was ich sehr empfehlen würde!

    
Adam Wright 25.09.2009 20:18
quelle
0

Sie können Params nicht verwenden und explizit mit Ihren Signaturen arbeiten.

%Vor%     
rick schott 25.09.2009 20:24
quelle

Tags und Links