My code is as follows:
public static void Output<T>(IEnumerable<T> dataSource) where T : class
{
dataSourceName = (typeof(T).Name);
switch (dataSourceName)
{
case (string)typeof(CustomerDetails).Name.ToString(); :
var t = 123;
break;
default:
Console.WriteLine("Test");
}
}
But this is not working. The case statement is giving me an error saying that a constant variable is expected. Please help guys thank you!
You can only match to constants in switch-statements.
Example:
works, but
doesn't
See C# switch statement limitations - why?
Basically Switches cannot have evaluated statements in the case statement. They must be statically evaluated.
Johnnie, Please go through msdn guide on switch. Also, the C# language specification clearly defines the compile time error case:
Hope this helps.
switch is very picky in the sense that the values in the switch must be a compile time constant. and also the value that's being compared must be a primitive (or string now). For this you should use an if statement.
The reason may go back to the way that C handles them in that it creates a jump table (because the values are compile time constants) and it tries to copy the same semantics by not allowing evaluated values in your cases.
You can't use a switch statement for this as the case values cannot be evaluated expressions. For this you have to use an an if/else ...
I also took the liberty of tidying up your conditional statement. There is no need to cast to string after calling
ToString()
. This will always return a string anyway. When comparing strings for equality, bare in mind that using the == operator will result in a case sensitive comparison. Better to use string compare = 0 with the last argument to set case sensitive on/off.