什么是C#中等效的javascript闭包?

Kev*_*aja 3 javascript c# delegates closures function

考虑以下简单的.js代码:

const createCounter = () => {
    let value = 0;
    return {
        increment: () => { value += 1 },
        decrement: () => { value -= 1 },
        logValue: () => { console.log(value); }
    }
}
Run Code Online (Sandbox Code Playgroud)

//用法

const { increment, decrement, logValue } = createCounter();
Run Code Online (Sandbox Code Playgroud)

我非常确定c#支持一流的功能,请注意,我不想使用类来重新制作上面的代码。什么是C#中的等效闭包?

我做了这个:

public Func<WhatType?> CreateCounter = () => {
    var value = 0;
    return what?
}
Run Code Online (Sandbox Code Playgroud)

har*_*ded 9

您可以混合使用ValueTupleslambda表达式

private static (Action increment, Action decrement, Action logValue) CreateCounter()
{
    var value = 0;

    return
        (
            () => value += 1,
            () => value -= 1,
            () => Console.WriteLine(value)
        );
}
Run Code Online (Sandbox Code Playgroud)

用法

var (increment, decrement, logValue) = CreateCounter();
increment();
increment();
decrement();
logValue();
Run Code Online (Sandbox Code Playgroud)