установка DEFAULT_SCHEMA в sys.database_principles
Это не просто значения NULL; только типы, встроенные в среду выполнения, могут быть объявлены const
(из памяти, это bools, различные типы int, float / double и строки).
Почему? Поскольку значение внедряется непосредственно в сборку во время компиляции, и нет возможности внедрить определяемые пользователем типы.
Ключевое слово readonly
, однако, должно делать то, что вам нужно. В отличие от const
, любые поля только для чтения
инициализируются во время выполнения, а не во время компиляции, поэтому они могут быть инициализированы более или менее любым выражением, которое вы хотите.
Изменить: ] как указывает Эрик Липперт, все не так просто. Например, const decimal
работает.
Это:
private const decimal TheAnswer = 42;
... компилируется (ну, Reflectors) в это:
[DecimalConstant(0, 0, (uint) 0, (uint) 0, (uint) 42)]
private static readonly decimal TheAnswer;
http://en.csharp-online.net/const,_static_and_readonly
Константы должны быть целочисленного типа (sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, bool или string), перечисление или ссылка на null.
Поскольку классы или структуры инициализируется во время выполнения с новым ключевое слово, а не во время компиляции, вы не может установить константу для класса или структура.
Поскольку обнуляемая структура - это структура, причина этого в приведенной выше цитате.
У вас не может быть ссылочного типа const (или структуры), поэтому у вас не может быть const int? который на самом деле является просто Nullable
Вы можете пометить его как readonly
readonly int? projectID = null;
Тогда его нельзя будет изменить вне конструкторов класса.
Вы можете вместо этого рассмотреть возможность использования модификатора "readonly".
const
s вычисляются во время компиляции, тогда как readonly
s принудительно применяются при запуске время. Экземпляры сложных типов не могут быть скомпилированы в сборку, поэтому должны быть созданы во время выполнения.
Вы в основном говорите:
У меня есть класс с полем projectId. это может иметь или не иметь значение, но что на самом деле НИКОГДА не имеет ценности, это всегда не определено.
С логической точки зрения ... само объявление не имеет смысла.