很多时候,当switch中有N个分支,且分支数已达10+,每个分支都是一个不小的方法体,那我们是不是应该考虑换一种方式来实现这个分支。
而我目前所能想到的是会用到如下几种方法。 1.Action 2.Func 3.Attribute 4.反射
简单方案一: 使用Action,Action是一个特殊的委托类,没有返回值。 具体的代码如下:
using System; using System.Collections.Generic;
namespace MyLofter.QuickStart { public class SwitchCaseActionQuickStart { private IDictionary<string,Action> _dictionary = new Dictionary<string, Action>();
public SwitchCaseActionQuickStart() { _dictionary.Add("say", Say); _dictionary.Add("eat", Eat); } public void Execute(string actionName) { if (_dictionary.ContainsKey(actionName)) { var action = _dictionary[actionName]; action.Invoke(); } } private void Say() { Console.WriteLine("Say something."); } private void Eat() { Console.WriteLine("eat some food."); } }}
DEMO中采用字典的KEY-VALUE形式,替换了传统的switch-case。只要我们在字典中添加了所有的switch分支,以及对应的action,那么,完整而简单的switch-case替换方案就完成了。我们只要使用如下代码,就能执行我们需要执行的action了。 var quickStart = new SwitchCaseActionQuickStart(); quickStart.Execute("eat"); quickStart.Execute("say");
转载于:https://www.cnblogs.com/mermaidLoft/p/5236343.html
相关资源:JAVA上百实例源码以及开源项目