C#中的局部静态变量?

时间:2014-07-15 14:11:21

标签: c# javascript .net

受JavaScript闭包的启发我试图使用Func<>模拟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

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

1 个答案:

答案 0 :(得分:5)

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

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

你可以写一下:

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

然后,您不必拨打PrintNextNumber(),而是var printNext = PrintNextNumber(); printNext.MoveNext;

我真的只是为了满足好奇而写了这个答案,我绝对会推荐真正做到这一点!

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