La risposta alla tua domanda è sì e no, a seconda di cosa intendi per "funzione inline". Se stai usando il termine come è usato nello sviluppo C ++, la risposta è no, non puoi farlo, anche un'espressione lambda è una chiamata di funzione. Sebbene sia vero che puoi definire espressioni lambda inline per sostituire le dichiarazioni di funzione in C #, il compilatore finisce comunque per creare una funzione anonima.
Ecco un codice davvero semplice che ho usato per testarlo (VS2015):
static void Main(string[] args)
{
Func<int, int> incr = a => a + 1;
Console.WriteLine($"P1 = {incr(5)}");
}
Cosa genera il compilatore? Ho usato uno strumento elegante chiamato ILSpy che mostra l'assembly IL reale generato. Dai un'occhiata (ho omesso molte cose sull'impostazione della classe)
Questa è la funzione principale:
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
Vedi quelle righe IL_0026 e IL_0027? Queste due istruzioni caricano il numero 5 e richiamano una funzione. Quindi IL_0031 e IL_0036 formattano e stampano il risultato.
Ed ecco la funzione chiamata:
.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
}
È una funzione davvero breve, ma è una funzione.
Vale la pena fare uno sforzo per ottimizzarlo? Nah. Forse se lo chiami migliaia di volte al secondo, ma se le prestazioni sono così importanti, dovresti considerare di chiamare il codice nativo scritto in C / C ++ per fare il lavoro.
Nella mia esperienza la leggibilità e la manutenibilità sono quasi sempre più importanti dell'ottimizzazione per un guadagno di velocità di pochi microsecondi. Usa le funzioni per rendere leggibile il tuo codice e per controllare l'ambito delle variabili senza preoccuparti delle prestazioni.
"L'ottimizzazione prematura è la radice di tutti i mali (o almeno della maggior parte di essi) nella programmazione". - Donald Knuth
"Un programma che non funziona correttamente non ha bisogno di essere eseguito velocemente" - Me