相关疑难解决方法(0)

为什么有些C#lambda表达式编译为静态方法?

正如您在下面的代码中看到的,我已将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)

输出:

示例输出示例

.net c# reflection lambda

121
推荐指数
3
解决办法
8143
查看次数

如何创建一个静态lambda用于表达式构建?

从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)

是的,显然它不起作用.

c# lambda c#-6.0

5
推荐指数
2
解决办法
1619
查看次数

标签 统计

c# ×2

lambda ×2

.net ×1

c#-6.0 ×1

reflection ×1