C# 用C语言调用动作委托#

C# 用C语言调用动作委托#,c#,.net,logging,.net-core,C#,.net,Logging,.net Core,在.NET内核日志中 方法Define(…)的定义如下: public static Action<ILogger, T1, Exception> Define<T1>(LogLevel logLevel, EventId eventId, string formatString) { var formatter = CreateLogValuesFormatter(formatString, expectedNamedParameterCount: 1);

在.NET内核日志中

方法
Define(…)
的定义如下:

public static Action<ILogger, T1, Exception> Define<T1>(LogLevel logLevel, EventId eventId, string formatString)
{
    var formatter = CreateLogValuesFormatter(formatString, expectedNamedParameterCount: 1);

    void Log(ILogger logger, T1 arg1, Exception exception)
    {
        logger.Log(logLevel, eventId, new LogValues<T1>(formatter, arg1), exception, LogValues<T1>.Callback);
    }

    return (logger, arg1, exception) =>
    {
        if (logger.IsEnabled(logLevel))
        {
            Log(logger, arg1, exception);
        }
    };
}

是否存在性能方面的原因?

如果比较委托和本地函数,本地函数对性能有好处。但在这种情况下,似乎没有那么多的好处。在我看来,代码已经从
静态
更改为本地函数。它也有好处,因为编译器可以将函数合并为一个函数。
public static Action<ILogger, T1, Exception> Define<T1>(LogLevel logLevel, EventId eventId, string formatString)
{
    var formatter = CreateLogValuesFormatter(formatString, expectedNamedParameterCount: 1);

    return (logger, arg1, exception) =>
    {
        if (logger.IsEnabled(logLevel))
        {
            logger.Log(logLevel, eventId, new LogValues<T1>(formatter, arg1), exception, LogValues<T1>.Callback);
        }
    };
}