Cast Rápido para Delegates
Esta classe estática contém métodos para transformar uma função nomeada em seu respectivo delegate: Func
ou Action
.
Desta forma é possível utilizar as extensões para Curry
e Aplicação Parcial
mais facilmente.
Métodos
Nome | Parâmetros | Retorno | Descrição |
---|---|---|---|
F | Func<TResult> function | Func<TResult> | Retorna a função enviada por parâmetro. |
F | Func<T, TResult> function | Func<T, TResult> | Retorna a função enviada por parâmetro. |
F | Func<T, T2, TResult> function | Func<T, T2, TResult> | Retorna a função enviada por parâmetro. |
F | Func<T, T2, T3, TResult> function | Func<T, T2, T3, TResult> | Retorna a função enviada por parâmetro. |
F | Func<T, T2, TResult> function | Func<T, T2, TResult> | Retorna a função enviada por parâmetro. |
A | Action function | Action | Retorna a função enviada por parâmetro. |
A | Action<T> function | Action<T> | Retorna a função enviada por parâmetro. |
A | Action<T, T2> function | Action<T, T2> | Retorna a função enviada por parâmetro. |
A | Action<T, T2, T3> function | Action<T, T2, T3> | Retorna a função enviada por parâmetro. |
A | Action<T, T2, T3, T4> function | Action<T, T2, T3, T4> | Retorna a função enviada por parâmetro. |
Como Usar
As diversas sobrecargas disponíveis podem ser utilizadas para transformar uma função nomeada em um delegate.
Infelizmente, por conta de uma limitação na linguagem não é possível tratar uma função nomeada diretamente como um delegate, conforme exemplo:
int SampleAdd(int value1, int value2)
=> value1 + value2;
SampleAdd.Curry();
SampleAdd.PartialApply(1);
A tentativa de executar os métodos Curry
e PartialApply
irão causar erro de compilação, notificando que SampleAdd
é um método e não pode ser utilizado neste contexto.
Para fazer isso precisamos adicionar uma instrução de conversão para o delegate.
Func<int, int, int> sampleAddAsDelegate = SampleAdd;
sampleAddAsDelegate.Curry();
sampleAddAsDelegate.PartialApply(1);
Através desta classe é possível realizar a conversão inline, sem termos de criar instruções adicionais.
Para fazer isso você precisa seguir os seguintes passos:
Adicionar uma instrução
using static Tango.Functional.QuickDelegateCast
, para realizar a importação estática do conversor;Utilizar a função correspondente descrita na subseção
Métodos
.
using static Tango.Functional.QuickDelegateCast;
int SampleAdd(int value1, int value2)
=> value1 + value2;
F<int, int, int>(SampleAdd).Curry();
F<int, int, int>(SampleAdd).PartialApply(1);
Através da sintaxe F()
e A()
é possível converter uma função para seu respectivo delegate e com isso, facilitar o processo de Currying
e Aplicação Parcial
.
O conceito para Currying e demais exemplos podem ser encontrados na seção Conceitos > Currying e Aplicação Parcial.