切换表达式或大小写标签必须是bool(或......)

Nov*_*Net 8 c#

为什么这个swich语句不起作用,给出错误:

switch表达式或case标签必须是bool,char,string,integral,enum或相应的可空类型

码:

 switch (btn.BackColor)
 {
     case Color.Green:
         break;
     case Color.Red:
         break;
     case Color.Gray:
         break;
 }
Run Code Online (Sandbox Code Playgroud)

Ehs*_*san 7

错误本身就是自我解释的.它告诉你switch表达式必须是以下类型之一:sbyte,byte,short,ushort,int,uint,long,ulong,char,string.或者正如C#语言规范所暗示的那样

从switch表达式的类型到以下可能的控制类型之一,必须存在一个用户定义的隐式转换(第6.4节):sbyte,byte,short,ushort,int,uint,long,ulong,char,string或者,可空类型对应于这些类型之一.

你可以看到BackColor在这里返回你的类型,它不满足上述任何规则,因此错误.

你可以这样做

switch (btn.BackColor.Name)
{
   case "Green":
      break;
   case "Red":
      break;
   case "Gray":
      break;
}
Run Code Online (Sandbox Code Playgroud)


Ree*_*sey 6

问题是你不能Colorswitch声明中使用a .它必须是以下类型之一,该类型之一的可空版本,或或可转换为这些类型之一:sbyte,byte,short,ushort,int,uint,long,ulong,char,string

从C#语言规范,8.7.2:

•否则,从switch表达式的类型到以下可能的控制类型之一,必须存在一个用户定义的隐式转换(第6.4节):sbyte,byte,short,ushort,int,uint,long,ulong,char, string,或者,与这些类型之一对应的可空类型.

在您的情况下,您可以通过使用字符串或仅使用一组if/ else语句来解决此问题.