A resposta à sua pergunta é sim e não, dependendo do que você entende por "função embutida". Se você estiver usando o termo como é usado no desenvolvimento C ++, a resposta é não, você não pode fazer isso - mesmo uma expressão lambda é uma chamada de função. Embora seja verdade que você pode definir expressões lambda in-line para substituir as declarações de função em C #, o compilador ainda acaba criando uma função anônima.
Aqui está um código muito simples que usei para testar isso (VS2015):
static void Main(string[] args)
{
Func<int, int> incr = a => a + 1;
Console.WriteLine($"P1 = {incr(5)}");
}
O que o compilador gera? Eu usei uma ferramenta bacana chamada ILSpy que mostra o assembly real do IL gerado. Dê uma olhada (omiti muitas coisas de configuração de classe)
Esta é a função principal:
IL_001f: stloc.0
IL_0020: ldstr "P1 = {0}"
IL_0025: ldloc.0
IL_0026: ldc.i4.5
IL_0027: callvirt instance !1 class [mscorlib]System.Func`2<int32, int32>::Invoke(!0)
IL_002c: box [mscorlib]System.Int32
IL_0031: call string [mscorlib]System.String::Format(string, object)
IL_0036: call void [mscorlib]System.Console::WriteLine(string)
IL_003b: ret
Vê essas linhas IL_0026 e IL_0027? Essas duas instruções carregam o número 5 e chamam uma função. Então IL_0031 e IL_0036 formatam e imprimem o resultado.
E aqui está a função chamada:
.method assembly hidebysig
instance int32 '<Main>b__0_0' (
int32 a
) cil managed
{
.maxstack 8
IL_0000: ldarg.1
IL_0001: ldc.i4.1
IL_0002: add
IL_0003: ret
}
É uma função muito curta, mas é uma função.
Vale a pena fazer algum esforço para otimizar? Nah. Talvez se você estiver chamando isso milhares de vezes por segundo, mas se o desempenho for tão importante, você deve considerar chamar o código nativo escrito em C / C ++ para fazer o trabalho.
Na minha experiência, a legibilidade e a manutenção são quase sempre mais importantes do que otimizar o ganho de velocidade de alguns microssegundos. Use funções para tornar seu código legível e para controlar o escopo de variáveis e não se preocupe com o desempenho.
"Otimização prematura é a raiz de todos os males (ou pelo menos a maioria deles) na programação." - Donald Knuth
"Um programa que não funciona corretamente não precisa ser executado rápido" - Eu