tengo problemas para entender lo que la hace que el error de compilación en el código de abajo:comportamiento de conexión extraño en .NET 4
static class Program
{
static void Main()
{
dynamic x = "";
var test = foo(x);
if (test == "test")
{
Console.WriteLine(test);
}
switch (test)
{
case "test":
Console.WriteLine(test);
break;
}
}
private static string foo(object item)
{
return "bar";
}
}
El error que consigo es en switch (test)
línea:
A switch expression or case label must be a bool, char, string, integral,
enum, or corresponding nullable type.
espectáculos Intellisence esa operación foo se resolverá en tiempo de ejecución, lo cual está bien porque estoy usando un tipo dinámico como un param. Sin embargo, no entiendo cómo se compila bien la condición if
cuando el interruptor no lo hace.
El código anterior es simplemente una versión simplificada de lo que tengo en mi aplicación (VSTO) que apareció después de migrar la aplicación de VSTO3 a VSTO4 cuando un método en VSTO cambiaba para devolver dynamic
valores de tipo en lugar de object
.
¿Alguien puede darme una explicación cuál es el problema. Sé cómo resolverlo, pero me gustaría entender qué está pasando.
Parece que no se puede utilizar un conmutador –
Como 'switch' no está definido para todos los objetos posibles tipo – thecoop
Todo el mundo parece responder como si la pregunta fuera" ¿Por qué no puedo 'cambiar' en un' dynamic '?" Creo que la pregunta realmente debería ser "¿Por qué' test' tipado como 'dinámico' en primer lugar?" Entiendo que * if * 'foo' tenía sobrecargas que devolvían diferentes tipos,' test' tendría que ser 'dynamic'; pero dado que * no *, sigo teniendo problemas para encontrar la respuesta a la pregunta "real" aquí. –