Observar a seguinte função que espera outra Function com um tipo de saída T
e simplesmente a chama retorna o resultado:
T CallFunction<T>(Func<T> lambda)
{
return lambda();
}
Eu esperaria poder substituir Func<T> lambda
por delegate T lambda<T>()
. No entanto, isso parece não ser possível, não posso fazer algo como:
T CallFunction<T>(delegate T lambda<T>())
{
return lambda();
}
ou:
delegate T MyLambda<T>();
T CallFunction<T>(MyLambda lambda)
{
return lambda();
}
Apenas minha sintaxe está errada ou ainda não entendi completamente o que é Delegate e Func ? Não é Func<T> lambda
apenas um delegado que retorna o tipo T
neste caso?
Você está quase lá,
lambda
é um delegado genérico e precisa fornecer o argumento genéricoObservação
em vez do seu
A primeira tentativa
é ilegal, pois introduziria um novo tipo na declaração de um parâmetro de função. A
delegate
palavra-chave pode ser usada ao definir uma função anônima (para ser passada como argumento), mas não pode ser usada para declarar um tipo de parâmetro. Em outras palavras, você poderia chamar aCallFunction
passagem de delegado anônimoFunc<T>
em si é um delegado :E a segunda tentativa de substituição está faltando um parâmetro genérico para o
MyLambda
delegado (o mesmo que você faz comFunc<T>
inT CallFunction<T>(Func<T> lambda)
):