C# 无法在扩展方法中捕获变量

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;

我想要一个返回lambda来设置给定变量的扩展方法。我只是有点懒,但在我看来,这会让我的代码更整洁

你知道为什么下面的代码不起作用吗?我得到的消息是float me未被使用,因为它是由lambda设置的,但是我希望它捕获float并返回lambda来设置它

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;
}