C#避免过长的IF和Switch分支的方法
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分支的方法的更多相关文章
- 编写高质量代码改善C#程序的157个建议——建议149:使用表驱动法避免过长的if和switch分支
建议149:使用表驱动法避免过长的if和switch分支 随着代码变得复杂,我们很容易被过长的if和switch分支困扰. 一个类枚举类型Week如下: enum Week { Monday, Tue ...
- 使用Arduino开发板连接干簧管(Reed Switch)的方法
在现实生活中,干簧管(Reed Switch)有许多重要的应用,如磁性门开关.笔记本电脑.智能手机等.在本篇文章中,我们将了解一些干簧管的知识,并介绍如何使用Arduino开发板连接干簧管. 干簧管( ...
- Java基础知识强化19:Java中switch分支语句
java中switch语句: 这里expression控制表达式的数据类型只能是byte.short.char.int四种整型类型和枚举类型,不能是boolean类型: Java7(1.7)改进了sw ...
- JAVA 长整型转换为IP地址的方法
JAVA 长整型转换为IP地址的方法 代码例如以下: /** * 整型解析为IP地址 * @param num * @return */ public static String int2iP(Lon ...
- 02_5if switch分支与循环语句
02_5if switch分支与循环语句 1.语句 1.1条件语句-根据不同条件,执行不同语句. if if ... else if ... else if if ... else if ... el ...
- C语言入门(11)——switch分支语句
C语言提供了一种用于多分支选择的switch语句, 其一般形式为: switch(表达式) { case 常量表达式1:语句1; break; case 常量表达式2:语句2; break; .... ...
- php导出excel长数字串显示为科学计数方法与最终解决方法
1.设置单元格为文本 $objPHPExcel = new PHPExcel(); $objPHPExcel->setActiveSheetIndex(0); $objPHPExcel-> ...
- CSU 1328 近似回文词【最长回文字符串(三种方法)】
输入一行文本,输出最长近似回文词连续子串.所谓近似回文词是指满足以下条件的字符串: 1. S以字母开头,字母结尾 2. a(S)和b(S)最多有2k个位置不同,其中a(S)是S删除所有非字母字符并且把 ...
- PHP switch分支语句中省略break后还会执行其他case的原因分析
请分析以下PHP代码的输出结果: $a= 'dog'; switch($a) { case 'cat': echo "\$a is cat"; case 'dog': echo & ...
随机推荐
- Spring AOP之异常转换
Spring-AOP之异常转换 引子 最近项目遇到了一个问题,就是说业务层向展现层需要转换成统一个异常类,并抛出异常,但是由于业务层的异常类过多,所以导致业务异常转换代码充斥着异常转换的代码,本着程序 ...
- 记“debug alipay”一事
背景:客户支付成功,无法返回支付结果 ===================================== 查找原因,追踪代码: verified = AlipayNotify.verify(p ...
- ecshop中404错误页面设置
在ecshop系统当中,比如你随意将商品详细页面的地址中的ID修改为一个不存在的商品ID,ecshop会自动跳转到首页.ecshop在这方面做得非常的差,甚至导致了很多的站不被搜索引擎收录.最模板提供 ...
- 存储过程--表变量和while简单运用
1.sql创建表/*订单*/CREATE TABLE Orders ( PRIMARY KEY(Id), Id int, Name varchar(20))2.存储过程ProTestDT 1)创 ...
- Xshell4连接Linux后 win快捷键锁屏
今天在使用Xshell连接CentOS后 使用Vim编辑器编辑完后 习惯性的按了Ctrl+S 然后按什么都不起作用 只能重新连接 通过查资料得知 Ctrl + S 是Linux 锁屏的快捷键 要解除锁 ...
- Oracle case用法
1:update 时做检查使用update mw_contract set payTimes=( case else payTimes end )'; 2:select时使用 select case ...
- Source Insight设置总结
在网上搜索了一些关于Source Insight的设置技巧,把这些结果给总结下来: 1. 背景色选择 要改变背景色Options->preference->windows backgrou ...
- Axure设计分析作业-实例解析
本文转载自人人都谁产品经理,作者完全使用Axure做了这一个产品需求文档.文档地址:http://1passwordmanager.sinaapp.com/ 大家可以先睹为快.这个PRD完全使用axu ...
- 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. ...
- 【转】[总结]FFMPEG视音频编解码零基础学习方法
在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...