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#中是否还有其他模拟局部静态变量的方法?谢谢.
这绝对是可怕的,但一种方法是使用迭代器方法并丢弃输出.例如,如果您想要:
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
| 归档时间: |
|
| 查看次数: |
296 次 |
| 最近记录: |