C#避免过长的IF和Switch分支的方法

1.最蠢形态

//很丑有没有!
//这个分支要是一两个还是可以接受的
class Program
{
static void Main(string[] args)
{
Command("播放");
Console.ReadKey();
} public static void Command(String _command)
{
switch(_command)
{
case "播放":
Console.WriteLine("开始"+_command+"了!!");
break;
case "快进":
Console.WriteLine("开始" + _command + "了!!");
break;
case "暂停":
Console.WriteLine("开始" + _command + "了!!");
break;
case "结束":
Console.WriteLine("开始" + _command + "了!!");
break;
}
}
}

2.表驱动形态

//这个表驱动 还可以利用反射去做
//这个比上面的强多了有没有?
class Program
{ public static Dictionary<string, Action> dic; static void Main(string[] args)
{
dic = new Dictionary<string, Action> {
{"播放", () => { Console.WriteLine("开始播放了!!"); }},
{"快进", () => { Console.WriteLine("开始快进了!!"); }},
{"暂停", () => { Console.WriteLine("开始暂停了!!");}}
};
//可以动态的添加命令和方法
dic.Add("结束", () => { Console.WriteLine("开始结束了!!"); });
Command(dic, "播放");
Command(dic, "快进");
Command(dic, "结束");
Command(dic, "快进两倍"); Console.ReadKey(); } static void Command(Dictionary<string, Action> _dic,String _command)
{
if (_dic.ContainsKey(_command))
{
_dic[_command]();
}
else
{
Console.WriteLine("没有命令啊!!");
}
}
}

3.多态形态

//利用多态来处理
//好处就是再添加命令时候不用修改,直接添加命令类就可以了
class Program
{
static void Main(string[] args)
{
Commander _commander = new PlayCommander();
_commander.Execute(); _commander = new FinishCommander();
_commander.Execute(); _commander = new SpeedCommander();
_commander.Execute(); Console.ReadKey();
}
} abstract class Commander
{
public abstract void Execute();
} class PlayCommander : Commander
{
public override void Execute()
{
Console.WriteLine("开始播放了了!!");
}
} class SpeedCommander : Commander
{
public override void Execute()
{
Console.WriteLine("开始快进了了!!");
}
} class PauseCommander : Commander
{
public override void Execute()
{
Console.WriteLine("开始暂停了了!!");
}
} class FinishCommander : Commander
{
public override void Execute()
{
Console.WriteLine("开始结束了了!!");
}
}

C#避免过长的IF和Switch分支的方法的更多相关文章

  1. 编写高质量代码改善C#程序的157个建议——建议149:使用表驱动法避免过长的if和switch分支

    建议149:使用表驱动法避免过长的if和switch分支 随着代码变得复杂,我们很容易被过长的if和switch分支困扰. 一个类枚举类型Week如下: enum Week { Monday, Tue ...

  2. 使用Arduino开发板连接干簧管(Reed Switch)的方法

    在现实生活中,干簧管(Reed Switch)有许多重要的应用,如磁性门开关.笔记本电脑.智能手机等.在本篇文章中,我们将了解一些干簧管的知识,并介绍如何使用Arduino开发板连接干簧管. 干簧管( ...

  3. Java基础知识强化19:Java中switch分支语句

    java中switch语句: 这里expression控制表达式的数据类型只能是byte.short.char.int四种整型类型和枚举类型,不能是boolean类型: Java7(1.7)改进了sw ...

  4. JAVA 长整型转换为IP地址的方法

    JAVA 长整型转换为IP地址的方法 代码例如以下: /** * 整型解析为IP地址 * @param num * @return */ public static String int2iP(Lon ...

  5. 02_5if switch分支与循环语句

    02_5if switch分支与循环语句 1.语句 1.1条件语句-根据不同条件,执行不同语句. if if ... else if ... else if if ... else if ... el ...

  6. C语言入门(11)——switch分支语句

    C语言提供了一种用于多分支选择的switch语句, 其一般形式为: switch(表达式) { case 常量表达式1:语句1; break; case 常量表达式2:语句2; break; .... ...

  7. php导出excel长数字串显示为科学计数方法与最终解决方法

    1.设置单元格为文本 $objPHPExcel = new PHPExcel(); $objPHPExcel->setActiveSheetIndex(0); $objPHPExcel-> ...

  8. CSU 1328 近似回文词【最长回文字符串(三种方法)】

    输入一行文本,输出最长近似回文词连续子串.所谓近似回文词是指满足以下条件的字符串: 1. S以字母开头,字母结尾 2. a(S)和b(S)最多有2k个位置不同,其中a(S)是S删除所有非字母字符并且把 ...

  9. PHP switch分支语句中省略break后还会执行其他case的原因分析

    请分析以下PHP代码的输出结果: $a= 'dog'; switch($a) { case 'cat': echo "\$a is cat"; case 'dog': echo & ...

随机推荐

  1. Spring AOP之异常转换

    Spring-AOP之异常转换 引子 最近项目遇到了一个问题,就是说业务层向展现层需要转换成统一个异常类,并抛出异常,但是由于业务层的异常类过多,所以导致业务异常转换代码充斥着异常转换的代码,本着程序 ...

  2. 记“debug alipay”一事

    背景:客户支付成功,无法返回支付结果 ===================================== 查找原因,追踪代码: verified = AlipayNotify.verify(p ...

  3. ecshop中404错误页面设置

    在ecshop系统当中,比如你随意将商品详细页面的地址中的ID修改为一个不存在的商品ID,ecshop会自动跳转到首页.ecshop在这方面做得非常的差,甚至导致了很多的站不被搜索引擎收录.最模板提供 ...

  4. 存储过程--表变量和while简单运用

    1.sql创建表/*订单*/CREATE TABLE Orders ( PRIMARY KEY(Id), Id int, Name varchar(20))2.存储过程ProTestDT    1)创 ...

  5. Xshell4连接Linux后 win快捷键锁屏

    今天在使用Xshell连接CentOS后 使用Vim编辑器编辑完后 习惯性的按了Ctrl+S 然后按什么都不起作用 只能重新连接 通过查资料得知 Ctrl + S 是Linux 锁屏的快捷键 要解除锁 ...

  6. Oracle case用法

    1:update 时做检查使用update mw_contract set payTimes=( case else payTimes end )'; 2:select时使用 select case ...

  7. Source Insight设置总结

    在网上搜索了一些关于Source Insight的设置技巧,把这些结果给总结下来: 1. 背景色选择 要改变背景色Options->preference->windows backgrou ...

  8. Axure设计分析作业-实例解析

    本文转载自人人都谁产品经理,作者完全使用Axure做了这一个产品需求文档.文档地址:http://1passwordmanager.sinaapp.com/ 大家可以先睹为快.这个PRD完全使用axu ...

  9. Smallest Rectangle Enclosing Black Pixels 解答

    Question An image is represented by a binary matrix with 0 as a white pixel and 1 as a black pixel. ...

  10. 【转】[总结]FFMPEG视音频编解码零基础学习方法

    在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...