Нет, такого нет в C #. Все состояния, которые вы хотите сохранить при нескольких вызовах методов, должны быть в полях, экземплярах или статических.
За исключением ... если вы захватите переменную в лямбда-выражении или что-то в этом роде. Например:
public Func<int> GetCounter()
{
int count = 0;
return () => count++;
}
Теперь вы можете использовать:
Func<int> counter = GetCounter();
Console.WriteLine(counter()); // Prints 0
Console.WriteLine(counter()); // Prints 1
Console.WriteLine(counter()); // Prints 2
Console.WriteLine(counter()); // Prints 3
Теперь, конечно, вы вызываете GetCounter()
только один раз, но эта "локальная переменная" определенно живет намного дольше, чем вы могли ожидать ...
Это может или не может быть полезным для вас - это зависит от того, что вы делаете. Но большую часть времени для объекта действительно имеет смысл иметь свое состояние в нормальных полях.