C# Switch is Type
常规用法:
- Type t = sender.GetType();
- if (t == typeof(Button)) {
- var realObj = (Button)sender;
- // Do Something
- }
- else if (t == typeof(CheckBox)) {
- var realObj = (CheckBox)sender;
- // Do something else
- }
- else {
- // Default action
- }
非常规方法一:
- TypeSwitch.Do(
- sender,
- TypeSwitch.Case<Button>(() => textBox1.Text = "Hit a Button"),
- TypeSwitch.Case<CheckBox>(x => textBox1.Text = "Checkbox is " + x.Checked),
- TypeSwitch.Default(() => textBox1.Text = "Not sure what is hovered over"));
- 相应的静态类
- static class TypeSwitch {
- public class CaseInfo {
- public bool IsDefault { get; set; }
- public Type Target { get; set; }
- public Action<object> Action { get; set; }
- }
- public static void Do(object source, params CaseInfo[] cases) {
- var type = source.GetType();
- foreach (var entry in cases) {
- if (entry.IsDefault || type == entry.Target) {
- entry.Action(source);
- break;
- }
- }
- }
- public static CaseInfo Case<T>(Action action) {
- return new CaseInfo() {
- Action = x => action(),
- Target = typeof(T)
- };
- }
- public static CaseInfo Case<T>(Action<T> action) {
- return new CaseInfo() {
- Action = (x) => action((T)x),
- Target = typeof(T)
- };
- }
- public static CaseInfo Default(Action action) {
- return new CaseInfo() {
- Action = x => action(),
- IsDefault = true
- };
- }
- }
方法二:
- 定义:var @switch = new Dictionary<Type, Action> {
- { typeof(Type1), () => ... },
- { typeof(Type2), () => ... },
- { typeof(Type3), () => ... },
- };
- @switch[typeof(MyType)]();
使用:
- if(@switch.ContainsKey(typeof(MyType))) {
- @switch[typeof(MyType)]();
- }
C# Switch is Type的更多相关文章
- jq塞入不同状态html的写法 switch (defaults.type)
(function($) { //生成一个block function createBlock(options) { var defaults = { type: "1", } v ...
- switch..case使用
1.多个if...else连在一起使用的时候,可以转为使用更方便的switch结构.switch (XXX) { case "aaa": // ... break; case &q ...
- JavaPersistenceWithHibernate第二版笔记-第五章-Mapping value types-005控制类型映射(Nationalized、@LOB、@org.hibernate.annotations.Type)
一.简介 1. 2. 3. 4. to override this default mapping. The JPA specification has a convenient shortcut a ...
- 《Go学习笔记 . 雨痕》流程控制(if、switch、for range、goto、continue、break)
Go 精简(合并)了流控制语句,虽然某些时候不够便捷,但够用. if...else... 条件表达式值必须是布尔类型,可省略括号,且左花括号不能另起一行. func main() { x := 3 i ...
- bootstrap switch样式修改与多列等间距布局
先以一张图开启今天的随笔 今天实习遇到了switch按钮,小姐姐说用插件bootstrap switch来写,我第一次用这个插件,首先在引入方面就遇到了很多坑,先来总结一下bootstrap swit ...
- 微信小程序组件switch
表单组件switch:官方文档 Demo Code: Page({ switch1Change: function (e){ console.log('switch1 发生 change 事件,携带值 ...
- [golang] go的typeswitch guard(类型区别)语法和type assertion(类型断言)语法
最近在实现golang,看到个go的特性语法: typeswitch guard. typeswitch guard语法如下: package main import "fmt" ...
- 纯css实现 switch开关
<!-- 直接看代码,利用了css3兄弟选择器 --><!-- html --> <button class="switch"> <inp ...
- 解决Layui的switch样式显示问题
Layui官方文档是这么说的: <input type="checkbox" name="xxx" lay-skin="switch" ...
随机推荐
- OpenStack Mixture HypervisorsDriver configure and implementation theory
通过本文,您将可以了解在 OpenStack 中如何进行混合 Hypervisor 的配置及其实现原理的基本分析.本文主要结合作者在 Nova 中的实际开发经验对 OpenStack 中混合 Hype ...
- 我的Android进阶之旅------>Android拍照小例子
今天简单的学习了一下android拍照的简单实现. 当然该程序是个小例子,非常简单,没有什么复杂的操作,但是可以学习到Android 拍照API流程. 1.在布局文件中添加一个 surfaceView ...
- TextView总结
先看看TextView的类继承结构: java.lang.Object ↳ android.view.View ↳ android.widget.TextView 是直接继承View类的,可扩展性很强 ...
- win10无法使用内置管理员账户打开
对于这种问题其实对于专业版用户倒不是难事,很容易解决,具体方法如下: 首先WIN+R输入:gpedit.msc,打开组策略,找到“计算机配置”里面的“Windows设置”,打开“安全设置” -> ...
- handsontable的单元格操作方法
1.为handsontable添加钩子方法 addHook(key,callback):key为钩子方法名 <span style="font-size:18px;"> ...
- AngularJs登录
AngularJs 登录的简单实现 多数AngularJs应用离不开登录操作,最近阅读了一篇关于AngularJs登录的博客,博客中实现的登录系统demo能够应用于多数小型AngularJs应用,实现 ...
- unity3d 建树篇
今天碰到有人问这个问题,然后我经过一番折腾,找到了方法.例如以下: 有学过Unity3d的同学生都知道我们在对地形拖拉树木等表层时,其树木在我们实例执行中,它们都是能够任其他物体穿过. 这是为什么.相 ...
- jquery模仿css3延迟效果
HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta ...
- VB短信猫开发包,支持超长短信
一.短信猫开发包(长短信/异步调用)说明: 短信猫开发包以OCX控件的形式提供,支持Windows平台下常用的开发工具:如VB.VB.net.VC++.Power Builder.C#.DELPH ...
- PHP函数参数的引用传递和值传递
函数的参数传递有两种方式 1,值传递 常见的 test($param) 方式就是值传递,在函数内部修改$param,不会影响外部变量$param的值 2,引用传递 参数是引用传递的方式,此时函数内部 ...