Me preguntaba si alguien podría explicar qué Func<int, string>
es y cómo se usa con algunos ejemplos claros.
¿Conoce a los delegados en general? Tengo una página sobre delegados y eventos que puede ayudar si no, aunque está más orientada a explicar las diferencias entre los dos.
Func<T, TResult>
es solo un delegado genérico: averigüe lo que significa en cualquier situación particular reemplazando los parámetros de tipo ( T
y TResult
) con los argumentos de tipo correspondientes ( int
y string
) en la declaración. También lo renombré para evitar confusiones:
string ExpandedFunc(int x)
En otras palabras, Func<int, string>
es un delegado que representa una función que toma un int
argumento y devuelve un string
.
Func<T, TResult>
se usa a menudo en LINQ, tanto para proyecciones como para predicados (en el último caso, TResult
es siempre bool
). Por ejemplo, puede usar a Func<int, string>
para proyectar una secuencia de números enteros en una secuencia de cadenas. Las expresiones lambda generalmente se usan en LINQ para crear los delegados relevantes:
Func<int, string> projection = x => "Value=" + x;
int[] values = { 3, 7, 10 };
var strings = values.Select(projection);
foreach (string s in strings)
{
Console.WriteLine(s);
}
Resultado:
Value=3
Value=7
Value=10
A
Func<int, string>
come entradas y devuelve cadenas. Entonces, ¿qué come ints y devuelve cadenas? Qué tal esto ...Allí, acabo de inventar una función que come entradas y devuelve cadenas. ¿Cómo lo usaría?
No muy sexy, lo sé, pero esa es la simple idea en la que se basan muchos trucos. Ahora, usemos un Func en su lugar.
En lugar de llamar a IntAsString en cada miembro, creé una referencia llamada fnc (estas referencias a métodos se llaman delegados ) y la usé en su lugar. (Recuerde que fnc come ints y devuelve cadenas).
Este ejemplo no es muy atractivo, pero muchas de las cosas inteligentes que verá se basan en la simple idea de funciones, delegados y métodos de extensión .
Uno de los mejores manuales sobre este tema que he visto está aquí . Tiene muchos más ejemplos reales. :)
fuente
Es un delegado que toma uno
int
como parámetro y devuelve un valor de tipostring
.A continuación, se muestra un ejemplo de su uso:
fuente
Func<int, string>
acepta un parámetro de valor int y devuelve un valor de cadena. Aquí hay un ejemplo en el que no es necesario un método de apoyo adicional.NOTA: El último tipo de objeto en Func (es decir, "cadena" en este ejemplo) es el tipo de retorno de funciones (es decir, no se limita a primitivas, sino a cualquier objeto). Por lo tanto,
Func<int, bool, float>
acepta los parámetros de valor int y bool y devuelve un valor flotante.HTH
fuente