No, no existe tal cosa en C#. Todo el estado que desea persistir en varias llamadas a métodos debe estar en los campos, ya sea instancia o estática.
Excepto ... si captura la variable en una expresión lambda o algo así. Por ejemplo:
public Func<int> GetCounter()
{
int count = 0;
return() => count++;
}
Ahora puede utilizar:
Func<int> counter = GetCounter();
Console.WriteLine(counter()); // Prints 0
Console.WriteLine(counter()); // Prints 1
Console.WriteLine(counter()); // Prints 2
Console.WriteLine(counter()); // Prints 3
Ahora, por supuesto que sólo está llamando GetCounter()
una vez, pero que "variable local" es, sin duda viviendo en mucho más allá del tiempo de vida que podría tener esperado ...
Eso puede o no ser de alguna utilidad para usted, depende de lo que esté haciendo. Pero la mayoría de las veces realmente tiene sentido que un objeto tenga su estado en campos normales.
C fue inventado cuando las discusiones no existían todavía. También lo fue Visual Basic, tuvieron que implementarlo en vb.net. La cantidad de código que necesita generar para que sea segura y la excepción es bastante masiva. –
Una pregunta muy buena –