我不理解以下代码导致编译错误的原因:
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.
智能提示显示foo操作将在运行时解决,这很好,因为我使用动态类型作为参数。然而,我不明白为什么if
条件编译得很好,而switch
却不行。
上面的代码只是我在应用程序(VSTO)中拥有的内容的简化版本,它出现在将应用程序从VSTO3迁移到VSTO4之后,当VSTO中的一个方法被更改以返回dynamic
类型值而不是object
时。
有人可以给我解释一下问题所在吗?我知道如何解决它,但我想了解发生了什么。
switch
,因此无法使用。 - thecooptest
一开始被定义为动态类型?” 我理解如果foo
有返回不同类型的重载,那么test
必须是动态类型; 但是既然它没有,我仍然很难弄清楚这里“真正”的问题的答案。 - Dan Taodynamic
输入,则输出也是dynamic
,无论表达式是否只有一种可能的解释(比如,你可以使用反射添加另一个方法)。 - thecoop