正如您在下面的代码中看到的,我已将Action<>对象声明为变量.
有人请让我知道为什么这个动作方法委托表现得像一个静态方法?
为什么它会true在以下代码中返回?
public static void Main(string[] args)
{
Action<string> actionMethod = s => { Console.WriteLine("My Name is " + s); };
Console.WriteLine(actionMethod.Method.IsStatic);
Console.Read();
}
Run Code Online (Sandbox Code Playgroud)

从C#6开始,lambdas现在默认为实例方法,并且永远不会是静态的(我假设它们现在总是被捕获,我认为它更有效[考虑到讨论似乎更快]).
请参阅此处:为什么没有捕获的lambda从C#5中的静态更改为C#6中的实例方法?
在这里:CSC和Roslyn编译器的静态lambda表达式评估的差异?
现在,在为表达式方法调用创建静态MethodInfos时,使用lambdas会导致问题 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)
Run Code Online (Sandbox Code Playgroud)
是的,显然它不起作用.