为什么这个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)
错误本身就是自我解释的.它告诉你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)
问题是你不能Color在switch声明中使用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语句来解决此问题.
| 归档时间: |
|
| 查看次数: |
9685 次 |
| 最近记录: |