C# 简化优化if/switch 表驱动法
表示这个很强大
字典加反射,搞定多window的switch
public partial class MainWindow : Window
{
Dictionary<string, Type> WindowList = new Dictionary<string, Type>();
public MainWindow()
{
InitializeComponent();
this.AddHandler(Button.ClickEvent, new RoutedEventHandler(Btn_Click));
LoadDic();
} void LoadDic()
{
Type decoratorType = typeof(DecoratorWindow);
Type viewboxType = typeof(ViewboxWindow);
Type valueType = typeof(ValueWindow);
Type lineType = typeof(LineWindow);
Type winStartType = typeof(WinStartWindow);
Type mp3Type = typeof(Mp3Window);
Type socketType = typeof(SocketWindow);
Type tagType = typeof(TagWindow);
Type txtType = typeof(TXTWindow);
Type QQType = typeof(QQWindow);
Type transformType = typeof(TransformWindow);
Type image3DWallType = typeof(Image3DWallWindow);
Type transType = typeof(TransWindow);
Type weatherType = typeof(WeatherWindow);
Type datagridType = typeof(DatagridWindow);
Type versionType = typeof(VersionWindow);
WindowList.Add("Decorator", decoratorType);
WindowList.Add("Viewbox", viewboxType);
WindowList.Add("Value", valueType);
WindowList.Add("Line", lineType);
WindowList.Add("WinStart", winStartType);
WindowList.Add("Mp3", mp3Type);
WindowList.Add("Socket", socketType);
WindowList.Add("Tag", tagType);
WindowList.Add("TXT", txtType);
WindowList.Add("QQ", QQType);
WindowList.Add("Transform", transformType);
WindowList.Add("Image3DWall", image3DWallType);
WindowList.Add("Trans", transType);
WindowList.Add("Weather", weatherType);
WindowList.Add("Datagrid", datagridType);
WindowList.Add("Version", versionType);
}
private void Btn_Click(object sender, RoutedEventArgs e)
{
Window window = (Window) Activator.CreateInstance(WindowList[(e.OriginalSource as Button).Tag.ToString()]);
window.ShowDialog();
}
}
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.AddHandler(Button.ClickEvent,new RoutedEventHandler(Button_Click));
} private void Button_Click(object sender, RoutedEventArgs e)
{
if ((e.OriginalSource as Button).Tag.ToString() == null) ;
else
{
Window window = WindowList[(e.OriginalSource as Button).Tag.ToString()];
switch ((e.OriginalSource as Button).Tag.ToString())
{
case "Decorator":
window = new DecoratorWindow();
break;
case "Viewbox":
window = new ViewboxWindow();
break;
case "Value":
window = new ValueWindow();
break;
case "Line":
window = new LineWindow();
break;
case "WinStart":
window = new WinStartWindow();
break;
case "Mp3":
window = new Mp3Window();
break;
case "Socket":
window = new SocketWindow();
break;
case "Tag":
window = new TagWindow();
break;
case "TXT":
window = new TXTWindow();
break;
case "QQ":
window = new QQWindow();
break;
case "Transform":
window = new TransformWindow();
break;
case "Image3DWall":
window = new Image3DWallWindow();
break;
case "Trans":
window Trans = new TransWindow();
break;
case "Weather":
window = new WeatherWindow();
break;
case "Datagrid":
window = new DatagridWindow();
break;
default:
break;
}
window.ShowDialog();
}
}
}
}
C# 简化优化if/switch 表驱动法的更多相关文章
- C语言表驱动法编程实践
数据压倒一切.如果选择了正确的数据结构并把一切组织的井井有条,正确的算法就不言自明.编程的核心是数据结构,而不是算法. ——Rob Pike 说明 本文基于这样的认识:数据是易变的,逻辑是稳定的. ...
- [经验] Win7减肥攻略(删文件不删功能、简化优化系统不简优化性能)
[经验] Win7减肥攻略(删文件不删功能.简化优化系统不简优化性能) ☆心梦无痕☆ 发表于 2014-1-24 11:15:04 https://www.itsk.com/thread-316471 ...
- 大话设计模式C++版——表驱动法改造简单工厂
上回<大话设计模式C++版——简单工厂模式>中指出了简单工厂模式的缺陷,即违背了开发—封闭原则,其主要原因是由于switch的判断结构的使用,使修改或添加新的对象时需要改动简单工厂类的代码 ...
- 黑盒测试用例设计方法&理论结合实际 -> 判定表驱动法
一. 概念 判定表是分析和表达多逻辑条件下执行不同操作的情况的工具. 二. 判定表驱动法的应用 判定表的优点: a. 能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏.因此,利用判定表能 ...
- C++的表驱动法
目的:使用表驱动法,替换复杂的if/else和switch/case语句. 说明:JS 等其他语言也都支持的. 表驱动发示例:http://blog.csdn.net/zhouyulu/article ...
- 编程模式(schema) —— 表驱动法(table-driven)
使用表驱动法,而非繁琐冗长的 if/else, switch case(本身也代表一种代码坏味道),也是替身编程质量的重要手段, 表驱动法是一种编程模式(schema)-- 从表里面查找信息而不使用逻 ...
- (1)消灭初级程序员常用的多层if-else嵌套--------------【表驱动法】
表驱动法 1.相信很多刚从事工作的程序员或一些初级程序员在写代码的时候会出现对一些逻辑判断写成多层if-else嵌套的经历,这种方式在一些简单的层次中运用起来确实可行,但对于一些大型项目逻辑判断比较多 ...
- 表驱动法在STM32中的应用
1.概念 所谓表驱动法(Table-Driven Approach)简而言之就是用查表的方法获取数据.此处的"表"通常为数组,但可视为数据库的一种体现.根据字典中的部首检字表查找读 ...
- mysql系列十一、mysql优化笔记:表设计、sql优化、配置优化
可以从这些方面进行优化: 数据库(表)设计合理 SQL语句优化 数据库配置优化 系统层.硬件层优化 数据库设计 关系数据库三范式 1NF:字段不可分; 2NF:有主键,非主键字段依赖主键; 3NF:非 ...
随机推荐
- 2013 CSU校队选拔赛(1) 部分题解
A: Decimal Time Limit: 1 Sec Memory Limit: 128 MB Submit: 99 Solved: 10 [ Submit][ Status][ Web ...
- Swift - 让StoryBoard设计视图,程序运行时都使用横屏形式
1,运行时横屏 将项目属性“General”->“DeviceOritentation”的Portrait复选框去掉 2,storyboard设计视图横屏 在storyboard中,单击中间界面 ...
- Android剪切板(ClipboardManager) 复制文本
Android也有剪切板(ClipboardManager) 注意:导包的时候 API 11之前: android.text.ClipboardManagerAPI 11之后: android.c ...
- 怎样使用CMenu类
CMenu类从CObject类派生而来.为什么要使用CMenu类呢?AppWzard不是把菜单做好了吗?在资源编辑器上修改菜单不是很方便吗? 我是个vc++初学者,自从当斑竹以来,天天看贴子, ...
- 深入探讨MFC消息循环和消息泵
首先,应该清楚MFC的消息循环(::GetMessage,::PeekMessage),消息泵(CWinThread::PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情.在MFC ...
- vb6源码后台点击任意窗口指定坐标XY位置,支持FLASH和一般的游戏
vb6源码后台点击任意窗口指定坐标XY位置,支持FLASH和一般的游戏,支持每个网页用不同的IP登陆,支持多线程自动点击 适合自动打怪,游戏练级,配合自动识图功能,自动验证码技术,可以实现更多功能. ...
- C语言scanf函数详解
函数名: scanf 功 能: 运行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设 ...
- Swift - 下标脚本方法介绍及实例
定义下标脚本之后,可以使用“[]”来存取数据类型的值. 示例1:实现一个我们自定的字符串类,可以方便的通过索引获取某一个字符值,或某一部分字符串.同时也可以通过索引,给某一部分赋值. 1 2 3 4 ...
- PageHeap,调试Heap问题的工具
<Windows用户态程序高效排错>第二章主要介绍用户态调试相关的知识和工具.本文主要讲了PageHeap,调试Heap问题的工具. AD:51CTO学院:IT精品课程在线看! 2.4.2 ...
- Java 建立mysql数据库连接的语句
每次在面试时被问到jdbc的数据路链接过程都卡着,这次不怕了,背会了... 第一个,比较粗糙的 try{ Class.forName("com.mysql.jdbc.Driver&quo ...