Почему я не могу объявить константу, используя var в С#?

это:

const int a = 5;

компилируется просто отлично, тогда как

const var a = 5;

не... while:

var a = 5;

компилируется так же хорошо, как это:

int a = 5;

почему?

Ответ 1

Ключевое слово var предназначалось для того, чтобы вы не могли писать длинные сложные имена типов, которые не могут быть константами.

Очень удобно записывать объявления типа

var dict = new Dictionary<string, List<Definition>>();

Это становится необходимым при использовании анонимных типов.

Для констант это не проблема.
Самое длинное встроенное имя типа с постоянными литералами decimal; это не очень длинное имя.

Возможно иметь произвольно длинные имена enum, которые могут использоваться как константы, но команда компилятора С#, по-видимому, не была заинтересована в этом.
Во-первых, если вы делаете постоянное значение enum, вы можете также положить его в enum.
Кроме того, имена enum не должны быть слишком длинными. (В отличие от сложных типичных типов, которые могут и часто должны)

Ответ 2

Это ограничение для компилятора, и причина этого ограничения дается eric lippert здесь

Ответ 3

Константы без var:

const int Value1 = 1;
const int Value2 = 2;

Константы с var (значения свойств анонимного типа не могут быть изменены после создания):

var constants = new { 
  Value1 = 1, 
  Value2 = 2,
};
//use as constants.Value1

Ответ 4

Так как константы должны быть встроенными числовыми типами или string, вы на самом деле не много экономит; const int имеет ту же длину, что и const var, а int - наиболее распространенный тип константы. Тогда там double, который действительно не так долго. Если у вас их много, используйте функцию выбора Alt; -)