With a lot of C++ background I've got used to writing the following:
const int count = ...; //some non-trivial stuff here for( int i = 0; i < count; i++ ) { ... }
and I expected that the same would work fine in C#. However...
byte[] buffer = new byte[4]; const int count = buffer.Length;
produces error CS0133: The expression being assigned to 'count' must be constant.
I don't get it. Why is that invalid? int
is a value type, isn't it? Why can't I assign a value and make the variable unchangeable this way?
Because const
in C# is a lot more const
than const
in C++. ;)
In C#, const
is used to denote a compile-time constant expression. It'd be similar to this C++ code:
enum { count = buffer.Length; }
Because buffer.Length
is evaluated at runtime, it is not a constant expression, and so this would produce a compile error.
C# has a readonly
keyword which is a bit more similar to C++'s const
. (It's still much more limited though, and there is no such thing as const-correctness in C#)
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