参考链接
[url]http://blog.csdn.net/weiwenhp/article/details/7951743[/url]
平时碰到分支条件判断最常用的是if else语句,不过有时要是分支条件太多用switch就更直观,方便一点.先举两个简单的例子.
[color=red][b]C++:[/b][/color]
[color=red][b]C#:[/b][/color]
C++,C#中swith的用法几乎是一模一样了.只有一些细小的差别,C#在C++的基础上做了一点改进.
[color=red][b]区别:[/b][/color]
1. C++中switch()括号中的变量类型只能是整形或者能默认转换成整形.比如[color=red]int,long,bool,char,enum[/color].(当然表达式也行,只要结果符合前面条件).但float,double,string就不行.另外自定义的类型,比如某个class,如果类中有运算符重载,class能默认转换成int.那也可以.不过一般情况很少会在switch中用到自定义的类型吧
C#中switch()括号中的变量类型可以是[color=red]byte,short,int,long,bool,enum[/color]另外还有string,这个在C++中是不行的.跟c++一样,可以用表达式,但float,double是不行的.自定义类型如可转换也行.
2. [color=red]C++中break是可以省略的[/color].但这样容易造成一个问题.如果没有break当某个分支符合条件执行完了后,会接着执行后面的分支.在上面的例子中,如果break全部去掉.结果会是twothreedefault
[color=red]而C#要你强制性使用break[/color],不用的话在编译时就会报错.这样就不会犯C++中因忘记写break而出现的错误.
补充:其实也可以用return替换break.只不过return是表示退出整个函数,而break只是退出switch这个语句块.
如果switch的语句块中的逻辑比较复杂还可以综合使用goto语句.
比如
当然很多很多人都说过在写代码时尽量另用goto语句,不得万不得已少用了.
[url]http://blog.csdn.net/weiwenhp/article/details/7951743[/url]
平时碰到分支条件判断最常用的是if else语句,不过有时要是分支条件太多用switch就更直观,方便一点.先举两个简单的例子.
[color=red][b]C++:[/b][/color]
int num = 2;
switch(num)
{
case 1:cout<<"one";break;
case 2:cout<<"two";break;
case 3:cout<<"three";break; //break可省略
default:cout<<"default";break; //default 非必须,可以省略
}
[color=red][b]C#:[/b][/color]
int num = 2;
switch (num)
{
case 1: Console.WriteLine("one"); break;
case 2: Console.WriteLine("two"); break;
case 3: Console.WriteLine("three"); break; //break不能省略
default: Console.WriteLine("default"); break; //default 可省略.
}
C++,C#中swith的用法几乎是一模一样了.只有一些细小的差别,C#在C++的基础上做了一点改进.
[color=red][b]区别:[/b][/color]
1. C++中switch()括号中的变量类型只能是整形或者能默认转换成整形.比如[color=red]int,long,bool,char,enum[/color].(当然表达式也行,只要结果符合前面条件).但float,double,string就不行.另外自定义的类型,比如某个class,如果类中有运算符重载,class能默认转换成int.那也可以.不过一般情况很少会在switch中用到自定义的类型吧
C#中switch()括号中的变量类型可以是[color=red]byte,short,int,long,bool,enum[/color]另外还有string,这个在C++中是不行的.跟c++一样,可以用表达式,但float,double是不行的.自定义类型如可转换也行.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ch04Ex03
{
class Program
{
static void Main(string[] args)
{
const string myName = "karli";
const string sexyName = "angelina";
const string sillyName = "ploppy";
string name;
Console.WriteLine("What is your name?");
name = Console.ReadLine();
switch (name.ToLower())
{
case myName:
Console.WriteLine("You have the same name as me!");
break;
case sexyName:
Console.WriteLine("My, what a sexy name you have!");
break;
case sillyName:
Console.WriteLine("That's a very silly name.");
break;
}
Console.WriteLine("Hello {0}!", name);
Console.ReadKey();
}
}
}
2. [color=red]C++中break是可以省略的[/color].但这样容易造成一个问题.如果没有break当某个分支符合条件执行完了后,会接着执行后面的分支.在上面的例子中,如果break全部去掉.结果会是twothreedefault
[color=red]而C#要你强制性使用break[/color],不用的话在编译时就会报错.这样就不会犯C++中因忘记写break而出现的错误.
补充:其实也可以用return替换break.只不过return是表示退出整个函数,而break只是退出switch这个语句块.
如果switch的语句块中的逻辑比较复杂还可以综合使用goto语句.
比如
int num = 2;
bool check = false;
switch (num)
{
case 1: Console.WriteLine("one"); break;
case 2: Console.WriteLine("two"); goto label;
case 3: Console.WriteLine("three"); break;
label: default: Console.WriteLine("default"); break;
}
当然很多很多人都说过在写代码时尽量另用goto语句,不得万不得已少用了.