Qu’est-ce qu’un groupe de méthodes en C #?

J’ai souvent rencontré une erreur telle que “impossible de convertir de ‘groupe de méthodes‘ en ‘chaîne'” dans des cas tels que:

var list = new List(); // ... snip list.Add(someObject.ToSsortingng); 

Bien sûr, il y a eu une faute de frappe dans la dernière ligne parce que j’ai oublié les parenthèses d’invocation après ToSsortingng . La forme correcte serait:

 var list = new List(); // ... snip list.Add(someObject.ToSsortingng()); // <- notice the parentheses 

Cependant, je me suis demandé quel est un groupe de méthodes. Google n’est pas une grande aide ni MSDN .

Un groupe de méthodes est le nom d’un ensemble de méthodes (qui peut ne représenter qu’un seul) – en théorie, la méthode ToSsortingng peut avoir plusieurs surcharges (plus toutes les méthodes d’extension): ToSsortingng() , ToSsortingng(ssortingng format) , etc. en soi est un “groupe de méthodes”.

Il peut généralement convertir un groupe de méthodes en un délégué (typé) en utilisant une résolution de surcharge – mais pas une chaîne, etc. ça n’a pas de sens.

Une fois que vous ajoutez des parenthèses, à nouveau; la résolution de surcharge se déclenche et vous avez identifié sans ambiguïté un appel de méthode.

De plus, si vous utilisez LINQ, vous pouvez apparemment faire quelque chose comme myList.Select(methodGroup) .

Donc, par exemple, j’ai:

 private ssortingng DoSomethingToMySsortingng(ssortingng input) { // blah } 

Au lieu d’indiquer explicitement la variable à utiliser comme ceci:

 public List GetSsortingngStuff() { return something.getSsortingngsFromSomewhere.Select(str => DoSomethingToMySsortingng(str)); } 

Je peux juste omettre le nom du var:

 public List GetSsortingngStuff() { return something.getSsortingngsFromSomewhere.Select(DoSomethingToMySsortingng); } 

Vous pouvez convertir un groupe de méthodes en délégué.

La signature du délégué sélectionne 1 méthode du groupe.

Cet exemple sélectionne la surcharge ToSsortingng() qui prend un paramètre de chaîne:

 Func fn = 123.ToSsortingng; Console.WriteLine(fn("00000000")); 

Cet exemple sélectionne la surcharge ToSsortingng() qui ne prend aucun paramètre:

 Func fn = 123.ToSsortingng; Console.WriteLine(fn()); 

Le premier résultat de votre recherche MSDN dit:

Le groupe de méthodes identifie la méthode à appeler ou l’ensemble des méthodes surchargées à partir desquelles choisir une méthode spécifique à appeler

D’après ce que je comprends, fondamentalement, lorsque vous écrivez simplement someInteger.ToSsortingng , il peut s’agir de:

 Int32.ToSsortingng(IFormatProvider) 

ou il peut se référer à:

 Int32.ToSsortingng() 

c’est ce qu’on appelle un groupe de méthodes.

La fonction ToSsortingng a de nombreuses surcharges – le groupe de méthodes serait le groupe constitué de toutes les surcharges différentes pour cette fonction.