A menudo he encontrado un error como "no se puede convertir de 'grupo de métodos' a 'cadena'" en casos como:
var list = new List<string>();
// ... snip
list.Add(someObject.ToString);
por supuesto, hubo un error tipográfico en la última línea porque olvidé los paréntesis de invocación después ToString
. La forma correcta sería:
var list = new List<string>();
// ... snip
list.Add(someObject.ToString()); // <- notice the parentheses
Sin embargo, llegué a preguntarme qué es un grupo de métodos. Google no es de gran ayuda ni MSDN .
c#
.net
method-group
Andrei Rînea
fuente
fuente
var list = new List<Func<string>>();
, entonces el grupo de métodos habría sido utilizable ylist.Add(someObject.ToString);
habría funcionado.Respuestas:
Un grupo método es el nombre para un conjunto de métodos (que podría ser sólo uno) - es decir, en teoría, el
ToString
método puede tener múltiples sobrecargas (además de cualquiera de los métodos de extensión):ToString()
,ToString(string format)
, etc - por lo tantoToString
por sí mismo es un "grupo de método".Por lo general, puede convertir un grupo de métodos en un delegado (tipado) utilizando la resolución de sobrecarga, pero no en una cadena, etc. No tiene sentido.
Una vez que agregue paréntesis, nuevamente; se activa la resolución de sobrecarga y ha identificado inequívocamente una llamada a un método.
fuente
Además, si está utilizando LINQ, aparentemente puede hacer algo como
myList.Select(methodGroup)
.Entonces, por ejemplo, tengo:
En lugar de indicar explícitamente la variable que se utilizará así:
Solo puedo omitir el nombre de la var:
fuente
return flag == true ? true : false
(facepalm).Puede convertir un grupo de métodos en un delegado.
La firma del delegado selecciona 1 método del grupo.
Este ejemplo selecciona la
ToString()
sobrecarga que toma un parámetro de cadena:Este ejemplo selecciona la
ToString()
sobrecarga que no toma parámetros:fuente
El primer resultado en su búsqueda de MSDN dijo:
Entiendo que, básicamente, porque cuando escribes
someInteger.ToString
, puede referirse a:o puede referirse a:
por eso se llama un grupo de métodos.
fuente
La
ToString
función tiene muchas sobrecargas: el grupo de métodos sería el grupo que consta de todas las sobrecargas diferentes para esa función.fuente