C#中是否存在一个关键字会使局部变量在多个调用中持续存在?

mer*_*011 11 c# c#-4.0

也就是说,在C中,我们可以定义一个函数:

func(){   
  static int foo = 1;   
  foo++;  
  return foo;  
}
Run Code Online (Sandbox Code Playgroud)

每次调用时它都会返回一个更高的数字.C#中是否有等效的关键字?

Jon*_*eet 17

不,C#中没有这样的东西.要在多个方法调用中持久化的所有状态必须位于实例或静态字段中.

除了...如果你在lambda表达式中捕获变量或类似的东西.例如:

public Func<int> GetCounter()
{
    int count = 0;

    return () => count++;
}
Run Code Online (Sandbox Code Playgroud)

现在你可以使用:

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

当然,你现在只打电话GetCounter()一次,但那个"局部变量"肯定会超出你预期的生命周期......

这可能对你有用也可能没用 - 这取决于你在做什么.但大多数情况下,对象在正常字段中具有状态确实有意义.