C#中的局部静态变量?

Uth*_*iah 2 .net javascript c#

受JavaScript Closures的启发我尝试使用Func <> Delegate在C#中模拟局部静态变量...这是我的代码..

public Func<int> Increment()
    {
        int num = 0;
        return new Func<int>(() =>
        {
            return ++num;
        });
    }

Func<int> inc = Increment();
Console.WriteLine(inc());//Prints 1
Console.WriteLine(inc());//Prints 2
Console.WriteLine(inc());//Prints 3
Run Code Online (Sandbox Code Playgroud)

我很想知道在C#中是否还有其他模拟局部静态变量的方法?谢谢.

Ben*_*son 5

这绝对是可怕的,但一种方法是使用迭代器方法并丢弃输出.例如,如果您想要:

public void PrintNextNumber()
{
    static int i = 0; //Can't do this in C#
    Console.Out.WriteLine(i++);
}
Run Code Online (Sandbox Code Playgroud)

你可以写:

public IEnumerator<object> PrintNextNumber()
{
    int i = 0;
    while (true)
    {
        Console.Out.WriteLine(i++);
        yield return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后PrintNextNumber()你就不用打电话了var printNext = PrintNextNumber(); printNext.MoveNext;.

我真的只是为了满足好奇而写了这个答案,我绝对不会建议真的这样做!

如果你想从方法中实际返回一些内容会变得更加讨厌,但是可以 - 你可以yield return改为,然后Current在调用之后使用它来检索它MoveNext