Это действительно интересно, но не связано с использованием var.
Это все еще происходит при использовании int (или на самом деле long, short и т. Д.).
Фактический виновник здесь в том, что значение MAX для цикла больше, чем максимальное значение для int32. при увеличении числового значения число будет переноситься, вызывая бесконечный цикл. Вы можете объявить var x, int x, short x и все из них зациклились бы аналогичным образом.
Характер увеличения числовых значений вызывает «обтекание». Вы можете попробовать это, запустив следующий код и наблюдая за значениями до и после увеличения. (Это также работает, если вы добавляете декремент).
int a = Int32.MaxValue;
Console.WriteLine(a);
a++;
Console.WriteLine(a);
short b = Int16.MaxValue;
Console.WriteLine(b);
b++;
Console.WriteLine(b);
long c = Int64.MaxValue;
Console.WriteLine(c);
c++;
Console.WriteLine(c);
Кроме того, переменная в размещенном фрагменте кода устанавливается в int с помощью оператора var x = 0. «0» само по себе является int и, следовательно, тип x устанавливается в int. Если вы укажете var x = 0F или 0L, тип будет другим.