Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CS0133 "The expression being assigned to 'identifier' must be constant" - what's the reason behind that?

Tags:

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?

like image 438
sharptooth Avatar asked Aug 03 '10 08:08

sharptooth


1 Answers

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#)

like image 148
jalf Avatar answered Oct 15 '22 06:10

jalf