I'm trying to do this:
const string intType = typeof(int).ToString();
switch (typeof(MyT).ToString())
{
case intType:
{
return "int";
break;
}
...
}
But compiler says:
error CS0133: The expression being assigned to 'intType' must be constant
As I know, typeof operator works at compile-time. So, what's wrong?
You don't know that because knowledge has to be true. Where did you get the idea that
typeofis executed at compile time? It produces a non-constant object. And then there is no guarantee thatToStringdoesn't produce a different string every time it runs, so it cannot be treated as a constant either.You're reasoning from a false belief.
The C# specification clearly describes the conditions that must be met for an expression to be a compile-time constant. Those conditions include the expression not containing any
typeofoperator or method call.But there are far bigger problems here. I assume that
MyTis a generic type parameter, which means you are attempting to switch on the value of a generic type parameter. That is almost always the wrong thing to do.What are you really trying to do? What problem are you really trying to solve? Because this code you've shown so far indicates that you're going down an unproductive path to solve whatever the real problem is.