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

时间:2019-04-23 17:01:56

标签: c# delegates action

我想要一个扩展方法,该方法返回一个lambda来设置给定变量。我有点懒,但是imo这会清理我的代码。

关于以下代码为何不起作用的任何想法?我得到的消息是未使用float我,因为它是由lambda设置的,但我希望它捕获float并返回一个lambda进行设置。

public static Action<float> setter(this float me)
{
    return x => me = x;
}

1 个答案:

答案 0 :(得分:1)

您的代码不起作用,因为它会修改lambda中的局部变量-float是值类型。

static void Main(string[] args)
{
    float f = 1;
    f.setter()(4);
    Console.WriteLine(f); // prints 1
}

您需要引用扩展方法:https://github.com/dotnet/roslyn/issues/165(C#7.2):

public static Action<float> setter(ref this float me)
{
    return x => me = x;
}