Это совершенно нормально.Если вы хотите, чтобы переменная существовала вне метода, вы должны объявить вне метода, как "поле".Просто переместите:
int firstClass = 0;
за пределы метода, добавив модификатор static
(в данном случае):
static int firstClass = 0;
Обратите внимание, что это само по себе не является потокобезопасным;если многопоточность является проблемой (например, ASP.NET), тогда используйте int newValue = Interlocked.Increment(ref firstClass);
.Я упоминаю об этом только потому, что в общем случае static
данные должны учитывать многопоточность, но я подозреваю, что это не проблема в вашем случае (exe консоли).