У меня возникла проблема с пониманием того, что вызывает ошибку компиляции в коде ниже:
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";
}
}
Ошибка, которую я получаю, находится в строке switch (test)
:
A switch expression or case label must be a bool, char, string, integral,
enum, or corresponding nullable type.
Intellisence показывает мне, что операция foo будет разрешена во время выполнения, что отлично, потому что я использую динамический тип в качестве параметра. Однако я не понимаю, как условие if
компилируется нормально, когда переключатель не работает.
Код выше - это просто упрощенная версия того, что у меня есть в приложении (VSTO), которое появилось после переноса приложения из VSTO3 в VSTO4, когда один метод в VSTO был изменен, чтобы возвращать значения типа dynamic
вместо object
.
Может ли кто-нибудь дать мне объяснение, в чем проблема. Я знаю, как это решить, но я хотел бы понять, что происходит.