6
Tengo el siguiente código en una página de afeitar CSHTML:¿Por qué falla una instrucción switch en una cadena cuando el valor proviene de ViewBag?
@{
var sort = ViewBag.Sort.ToString();
switch (sort)
{
case "None": Html.Action("SortNone"); break;
case "Name": Html.Action("SortName"); break;
case "Date": Html.Action("SortDate"); break;
}
}
Sin embargo, esto está fallando con un mensaje de error del compilador:
CS0151: A switch expression or case label must be a bool, char, string, integral, enum, or corresponding nullable type
Pero especie es una cadena! Reescribiendo esto como una serie de declaraciones if/else funciona, pero no es tan elegante.
OK, eso tiene la menor cantidad de sentido de todo lo que he conocido ... ¡pero funciona! Me gustaría entrar en una discusión filosófica sobre por qué ToString() no solo devuelve una cadena, sino que probablemente no necesito saber ... –
Como es dinámico, el método estará vinculado en tiempo de ejecución, no hay cualquier cosa que detenga una nueva implementación de ToString que devuelva algo que no sea una cadena. Puede usar esto ((objeto) ViewBag.Sort) .ToString() –
¡Por supuesto! Gracias por la explicación y la respuesta rápida. –