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

问题描述 投票:0回答:1

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

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

public static Action<float> setter(this float me)
{
    return x => me = x;
}
c# delegates action
1个回答
1
投票

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

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

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

public static Action<float> setter(ref this float me)
{
    return x => me = x;
}
© www.soinside.com 2019 - 2024. All rights reserved.