Ответ на ваш вопрос - да или нет, в зависимости от того, что вы подразумеваете под «встроенной функцией». Если вы используете термин так, как он используется в разработке на C ++, тогда ответ будет отрицательным, вы не можете этого сделать - даже лямбда-выражение является вызовом функции. Хотя верно то, что вы можете определять встроенные лямбда-выражения для замены объявлений функций в C #, компилятор все равно создает анонимную функцию.
Вот действительно простой код, который я использовал для тестирования (VS2015):
static void Main(string[] args)
{
Func<int, int> incr = a => a + 1;
Console.WriteLine($"P1 = {incr(5)}");
}
Что генерирует компилятор? Я использовал отличный инструмент под названием ILSpy, который показывает фактическую сгенерированную сборку IL. Посмотрите (я пропустил много вещей по настройке классов)
Это основная функция:
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
Видите эти строки IL_0026 и IL_0027? Эти две инструкции загружают число 5 и вызывают функцию. Затем отформатируйте IL_0031 и IL_0036 и распечатайте результат.
И вот функция, которая называется:
.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
}
Это действительно короткая функция, но это функция.
Стоит ли прилагать усилия для оптимизации? Неа. Возможно, если вы вызываете его тысячи раз в секунду, но если производительность так важна, вам следует подумать о вызове собственного кода, написанного на C / C ++, для выполнения работы.
По моему опыту, удобочитаемость и ремонтопригодность почти всегда важнее, чем оптимизация для увеличения скорости на несколько микросекунд. Используйте функции, чтобы сделать ваш код читабельным, контролировать область видимости переменных и не беспокоиться о производительности.
«Преждевременная оптимизация - это корень всего зла (или, по крайней мере, большей его части) в программировании». - Дональд Кнут
«Программа, которая работает некорректно, не должна работать быстро» - Я