C# лямбда-метод, установить свойство Name сгенерированного MethodInfo? - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть несколько вспомогательных методов, которые выплевывают лямбда-функции на основе их параметров, в основном это частичное применение. Теперь есть другое место, где используются эти Fun c <>, где для ясности журнала и отладки было бы неплохо, если бы я мог дать собственные имена для сгенерированной лямбда-метки MethodInfo, есть ли способ для этого?

Пример:

    public static Func<IAttrProxy, IAttrProxy, bool> NumberListEquals(double tolerance = 0)
    {
        Func<IAttrProxy,IAttrProxy,bool> lambda = (a, b) =>
        {
            if (AsNumberList(a, out IReadOnlyList<double> aValue) == false)
                return false;
            if (AsNumberList(b, out IReadOnlyList<double> bValue) == false)
                return false;
            if (aValue.Count != bValue.Count)
                return false;
            for (int i = 0; i < aValue.Count; i++)
            {
                if (Math.Abs(aValue[i] - bValue[i]) <= tolerance)
                    return false;
            }
            return true;
        };
        MethodInfo methodInfo = lambda.Method;
        methodInfo.Name = "NumberListEquals with tolerance: " + tolerance;
        return lambda;
    }

Очевидно, что строка со второй по последнюю не компилируется. Есть ли способ достичь желаемого эффекта? Чтобы позже, когда я использовал параметр Fun c <>, я мог получить .Method.Name, и он содержит «NumberListEquals с допуском: ..

...