J'ai souvent rencontré une erreur telle que "impossible de convertir de 'groupe de méthodes' en 'chaîne'" dans des cas comme:
var list = new List<string>();
// ... snip
list.Add(someObject.ToString);
bien sûr, il y avait une faute de frappe dans la dernière ligne parce que j'ai oublié les parenthèses d'invocation après ToString
. La forme correcte serait:
var list = new List<string>();
// ... snip
list.Add(someObject.ToString()); // <- notice the parentheses
Cependant, je me suis demandé ce qu'est un groupe de méthodes. Google n'est pas une grande aide ni MSDN .
c#
.net
method-group
Andrei Rînea
la source
la source
var list = new List<Func<string>>();
, alors le groupe de méthodes aurait été utilisable etlist.Add(someObject.ToString);
aurait fonctionné.Réponses:
Un groupe de méthode est le nom d'un ensemble de méthodes (qui pourrait être juste un) - à savoir , en théorie , la
ToString
méthode peut avoir plusieurs surcharges (plus les méthodes d'extension):ToString()
,ToString(string format)
, etc - doncToString
par lui - même est un « groupe de méthode ».Il peut généralement convertir un groupe de méthodes en délégué (typé) en utilisant la résolution de surcharge - mais pas en chaîne, etc. ça n'a pas de sens.
Une fois que vous ajoutez des parenthèses, encore une fois; la résolution de surcharge entre en jeu et vous avez identifié sans ambiguïté un appel de méthode.
la source
De plus, si vous utilisez LINQ, vous pouvez apparemment faire quelque chose comme
myList.Select(methodGroup)
.Ainsi, par exemple, j'ai:
Au lieu d'indiquer explicitement la variable à utiliser comme ceci:
Je peux simplement omettre le nom du var:
la source
return flag == true ? true : false
(facepalm).Vous pouvez convertir un groupe de méthodes en délégué.
La signature du délégué sélectionne 1 méthode parmi le groupe.
Cet exemple sélectionne la
ToString()
surcharge qui prend un paramètre de chaîne:Cet exemple sélectionne la
ToString()
surcharge qui ne prend aucun paramètre:la source
Le premier résultat de votre recherche MSDN indique:
ma compréhension est que, fondamentalement, parce que lorsque vous écrivez
someInteger.ToString
, cela peut faire référence à:ou il peut se référer à:
il est donc appelé un groupe de méthodes.
la source
La
ToString
fonction a de nombreuses surcharges - le groupe de méthodes serait le groupe composé de toutes les différentes surcharges pour cette fonction.la source