受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#中是否还有其他模拟局部静态变量的方法? 谢谢。
答案 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
检索它1} p>