C# 无法在扩展方法中捕获变量
我想要一个返回lambda来设置给定变量的扩展方法。我只是有点懒,但在我看来,这会让我的代码更整洁 你知道为什么下面的代码不起作用吗?我得到的消息是float me未被使用,因为它是由lambda设置的,但是我希望它捕获float并返回lambda来设置它C# 无法在扩展方法中捕获变量,c#,delegates,action,C#,Delegates,Action,我想要一个返回lambda来设置给定变量的扩展方法。我只是有点懒,但在我看来,这会让我的代码更整洁 你知道为什么下面的代码不起作用吗?我得到的消息是float me未被使用,因为它是由lambda设置的,但是我希望它捕获float并返回lambda来设置它 public static Action<float> setter(this float me) { return x => me = x; } 公共静态动作设置器(此float me) { 返回x=>me=x;
public static Action<float> setter(this float me)
{
return x => me = x;
}
公共静态动作设置器(此float me)
{
返回x=>me=x;
}
您的代码无法工作,因为它修改了lambda中的局部变量-float是值类型
static void Main(string[] args)
{
float f = 1;
f.setter()(4);
Console.WriteLine(f); // prints 1
}
您需要ref扩展方法:(C#7.2):
publicstaticactionsetter(参考此floatme)
{
返回x=>me=x;
}
public static Action<float> setter(ref this float me)
{
return x => me = x;
}