Начиная с С# 6, lambdas теперь по умолчанию использует методы экземпляра и никогда не будет статичным (что, я полагаю, означает, что они всегда захватывают сейчас, что, я думаю, более эффективно [кажется, быстрее, учитывая дискуссии]).
Смотрите здесь: Почему лямбда без захвата изменилась с статичного в С# 5 на метод экземпляра на С# 6?
и здесь: Разница в оценке статического лямбда-выражения компилятора CSC и Roslyn?
Это вызывает проблемы с использованием lambdas при создании статического метода MethodInfos для вызовов методов выражения, таких как Expression.Convert(Expression, typeof({SomeType}), conversionMethodInfo);
Итак, каков новый способ сделать это? Я попытался использовать "статический" модификатор с lambdas, и он не работает. Для тех, кто не может представить такой код, это может быть один пример:
Func <T1,T2> converter = static v => ConvertT1ToT2(v); // ('T' is whatever type you want)
Expression.Convert(expression, typeof({SomeType}), converter.Method) // (error: converter.Method.IsStatic is false)
Да, очевидно, это не сработает.