Ich habe häufig einen Fehler wie "Konvertieren von 'Methodengruppe' in 'Zeichenfolge'" in folgenden Fällen festgestellt:
var list = new List<string>();
// ... snip
list.Add(someObject.ToString);
Natürlich gab es in der letzten Zeile einen Tippfehler, weil ich die Aufrufklammern danach vergessen habe ToString
. Die richtige Form wäre:
var list = new List<string>();
// ... snip
list.Add(someObject.ToString()); // <- notice the parentheses
Ich habe mich jedoch gefragt, was eine Methodengruppe ist. Google ist weder eine große Hilfe noch ein MSDN .
c#
.net
method-group
Andrei Rînea
quelle
quelle
var list = new List<Func<string>>();
, wäre die Methodengruppe verwendbar gewesen undlist.Add(someObject.ToString);
hätte funktioniert.Antworten:
Verfahren Gruppe ist der Name für eine Reihe von Methoden (das könnte nur eine sein) - also in der Theorie die
ToString
Methode mehr Überlastungen kann (plus irgendwelche Erweiterungsmethoden)ToString()
,ToString(string format)
usw. - daherToString
von selbst , wird als „Methode Gruppe“.Normalerweise kann eine Methodengruppe mithilfe der Überlastungsauflösung in einen (typisierten) Delegaten konvertiert werden - jedoch nicht in eine Zeichenfolge usw.; es macht keinen Sinn.
Sobald Sie wieder Klammern hinzufügen; Die Überlastungsauflösung setzt ein und Sie haben einen Methodenaufruf eindeutig identifiziert.
quelle
Wenn Sie LINQ verwenden, können Sie anscheinend auch so etwas tun
myList.Select(methodGroup)
.So habe ich zum Beispiel:
Anstatt die zu verwendende Variable explizit wie folgt anzugeben:
Ich kann den Namen der Var einfach weglassen:
quelle
return flag == true ? true : false
(Gesichtspalme).Sie können eine Methodengruppe in einen Delegaten umwandeln.
Die Delegatensignatur wählt 1 Methode aus der Gruppe aus.
In diesem Beispiel wird die
ToString()
Überladung ausgewählt, für die ein Zeichenfolgenparameter erforderlich ist:In diesem Beispiel wird die
ToString()
Überlastung ausgewählt, für die keine Parameter erforderlich sind:quelle
Das erste Ergebnis Ihrer MSDN-Suche lautete:
Mein Verständnis ist, dass im Grunde genommen, wenn Sie nur schreiben
someInteger.ToString
, es sich beziehen kann auf:oder es kann sich beziehen auf:
Daher wird es als Methodengruppe bezeichnet.
quelle
Die
ToString
Funktion hat viele Überladungen - die Methodengruppe wäre die Gruppe, die aus all den verschiedenen Überladungen für diese Funktion besteht.quelle