[TestClass]
public class MsProjectIntegration {
const int? projectID = null;
// The type 'int?' cannot be declared const
// ...
}
Why can't I have a const int??
Edit: The reason I wanted a nullable int as a const is because I'm just using it for loading some sample data from a database. If it's null I was just going to initialize sample data at runtime. It's a really quick test project and obviously I could use 0 or -1 but int? just felt like the right data structure for what I wanted to do. readonly seems like the way to go
It's not just nullables; only types built into the runtime can be declared const (from memory, it's bools, the various types of int, floats/doubles, and strings).
Why? Because the value gets embedded directly into the assembly at compile time, and there's no way to embed user-defined types.
The readonly keyword should do what you need, however. By contrast with const, any readonly fields get initialized at runtime rather than compile time, so they can be initialized with more or less any expression you want.
Edit: as Eric Lippert points out, it's not this straightforward. For instance, const decimal works.
This:
private const decimal TheAnswer = 42;
...compiles (well, Reflectors) to this:
[DecimalConstant(0, 0, (uint) 0, (uint) 0, (uint) 42)]
private static readonly decimal TheAnswer;
http://en.csharp-online.net/const,_static_and_readonly
Constants must be of an integral type (sbyte, byte, short, ushort, int, uint, long, ulong, char, float, double, decimal, bool, or string), an enumeration, or a reference to null.
Since classes or structures are initialized at run time with the new keyword, and not at compile time, you can't set a constant to a class or structure.
Since nullable is a struct, the above quote is the reason why.
You can't have a const reference type (or a struct), therefore you can't have a const int? which is really just a Nullable<int>.
You can mark it as readonly
readonly int? projectID = null;
Then it can't be modified outside the class constructors.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With