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:非 ...
随机推荐
- python 调用shell命令三种方法
#!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器: #!/usr/bin/env python这种用法是为了防止操作系统用户没有将pyth ...
- Mysql找回管理员password
我们使用MYSQL的时候有可能由于种种原因忘记ROOTpassword,假设是那样数据库可能就废掉了.可是今天给大家分享下找回ROOTpassword的方法或者说是在不知道rootpassword的情 ...
- HDU 1863 畅通project (最小生成树是否存在)
题意 中文 入门最小生成树 prim大法好 #include<cstdio> #include<cstring> using namespace std; const int ...
- 与众不同 windows phone (5) - Chooser(选择器)
原文:与众不同 windows phone (5) - Chooser(选择器) [索引页][源码下载] 与众不同 windows phone (5) - Chooser(选择器) 作者:webabc ...
- 对数的操作 开始我的JAVA历程
package Text; public class Sumn { public static void main (String args[]){ System.out.println(" ...
- 提升Delphi编程效率必须使用的快捷键(Delphi2007版本)
1. [CTRL+空格] [CTRL+SHIFT+空格] 这两个快捷键都是在代码编写过程中用到的,起提示作用,使用频率最高. CTRL+空格: 在当前光标处提示有哪些变量.函数可以使用.这个功能对于无 ...
- Html中隐藏a标签
<div><a href="#"><span style="visibility:hidden">我的</span&g ...
- windows下Memcached 架设及java应用
1 Memcached 介绍 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据 ...
- 用代码定位硬盘上的文件(使用ShellExecute执行explorer /select命令,其它参数也很全)
问题:如何用代码控制资源浏览器,并定位到指定的文件? 答:使用ShellExecute,配合explorer即可 ShellExecute(Application.Handle, 'open', PC ...
- 【Matlab编程】Matlab让电脑失而复得
在学校常常有同学电脑失窃,大抵都是粗细大意.据说iPhone手机失窃后能够获取小偷的照片,从而将照片找到.如今用matlab写一个程序使得当小偷使用电脑上网时,电脑自己主动将电脑前面的人的照片发到你指 ...