La respuesta a su pregunta es sí y no, dependiendo de lo que quiera decir con "función en línea". Si está usando el término como se usa en el desarrollo de C ++, entonces la respuesta es no, no puede hacer eso, incluso una expresión lambda es una llamada a función. Si bien es cierto que puede definir expresiones lambda en línea para reemplazar declaraciones de funciones en C #, el compilador aún termina creando una función anónima.
Aquí hay un código realmente simple que usé para probar esto (VS2015):
static void Main(string[] args)
{
Func<int, int> incr = a => a + 1;
Console.WriteLine($"P1 = {incr(5)}");
}
¿Qué genera el compilador? Usé una ingeniosa herramienta llamada ILSpy que muestra el ensamblaje de IL real generado. Eche un vistazo (he omitido muchas cosas de configuración de clases)
Esta es la función 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
¿Ves esas líneas IL_0026 e IL_0027? Esas dos instrucciones cargan el número 5 y llaman a una función. Luego, formatee IL_0031 e IL_0036 e imprima el resultado.
Y aquí está la función llamada:
.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
}
Es una función realmente corta, pero es una función.
¿Vale la pena hacer algún esfuerzo para optimizarlo? Nah. Tal vez si lo llama miles de veces por segundo, pero si el rendimiento es tan importante, entonces debería considerar llamar al código nativo escrito en C / C ++ para que haga el trabajo.
En mi experiencia, la legibilidad y la capacidad de mantenimiento son casi siempre más importantes que la optimización para obtener unos pocos microsegundos de ganancia de velocidad. Utilice funciones para hacer que su código sea legible y para controlar el alcance de las variables y no se preocupe por el rendimiento.
"La optimización prematura es la raíz de todos los males (o al menos la mayor parte) en la programación". - Donald Knuth
"Un programa que no se ejecuta correctamente no necesita ejecutarse rápido" - Yo