Gostaria de saber se alguém poderia explicar o que Func<int, string>
é e como é usado com alguns exemplos claros.
Você está familiarizado com os delegados em geral? Tenho uma página sobre delegados e eventos que pode ajudar se não, embora seja mais voltada para explicar as diferenças entre os dois.
Func<T, TResult>
é apenas um delegado genérico - descubra o que isso significa em qualquer situação particular, substituindo os parâmetros de tipo ( T
e TResult
) pelos argumentos de tipo correspondentes ( int
e string
) na declaração. Eu também o renomei para evitar confusão:
string ExpandedFunc(int x)
Em outras palavras, Func<int, string>
é um delegado que representa uma função recebendo um int
argumento e retornando um string
.
Func<T, TResult>
é freqüentemente usado no LINQ, tanto para projeções quanto para predicados (no último caso, TResult
é sempre bool
). Por exemplo, você pode usar a Func<int, string>
para projetar uma sequência de inteiros em uma sequência de strings. As expressões lambda geralmente são usadas no LINQ para criar os 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 ints e retorna strings. Então, o que come ints e retorna strings? Que tal agora ...Lá, acabei de criar uma função que come ints e retorna strings. Como eu usaria?
Não é muito sexy, eu sei, mas essa é a ideia simples na qual muitos truques se baseiam. Agora, vamos usar um Func.
Em vez de chamar IntAsString em cada membro, criei uma referência a ele chamada fnc (essas referências a métodos são chamadas de delegados ) e usei isso. (Lembre-se de que o fnc come ints e retorna strings).
Este exemplo não é muito atraente, mas muitas das coisas inteligentes que você verá são baseadas na ideia simples de funções, delegados e métodos de extensão .
Uma das melhores instruções sobre esse assunto que já vi está aqui . Ele tem muito mais exemplos reais. :)
fonte
É um delegado que recebe um
int
como parâmetro e retorna um valor do tipostring
.Aqui está um exemplo de seu uso:
fonte
Func<int, string>
aceita um parâmetro de valor int e retorna um valor de string. Aqui está um exemplo em que um método de suporte adicional é desnecessário.NOTA: O último tipo de objeto em Func (ou seja, "string" neste exemplo) é o tipo de retorno das funções (ou seja, não limitado a primitivos, mas a qualquer objeto). Portanto,
Func<int, bool, float>
aceita os parâmetros de valor int e bool e retorna um valor flutuante.HTH
fonte