switch(变量)语句变量是有严格控制的,如string类型和float类型编译就会报错,它支持char, int, short, long等等(仅限于C和C++中,在C#中则可以通过)
另外对于switch语句中的返回值不同的语言也有不同的限制,如C++语言和C#语言,看下面两段代码
#include<iostream>
#include<string>
using namespace std;
class pro
{
private:
int numberA;
int numberB;
public:
pro(int A,int B)
{
numberA=A;
numberB=B;
}
int operation(char op)
{
switch(op)
{
case '+':
return numberA+numberB;
break;
}
}
};
int main()
{
pro p(5,8);
cout<< p.operation('+')<<endl;
getchar();
return 0;
}
C++语言中在switch中没有硬性的返回值,仅仅在case语句中有返回值,编译运行无误。但是在C#语言就不行了看下面一段代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program { private int numberA; private int numberB; int result; public int operation (string stroperation) { switch(stroperation) { case "+": result=numberA + numberB; break; } return result; } static void Main(string[] args) { Program Pro = new Program(); Pro.numberA = 1; Pro.numberB = 2; Console.WriteLine(Pro.operation("+")); } } }
在以上的C#代码如果直接在case语句中返回一个numberA + numberB; 而没有后面的return result;编译运行是通不过的。这应该是C#编译器更为安全的控制方式,防止case语句都没有执行,而无返回结果造成程序运行错误,因此在case语句中加入抛出异常是很有意义的!