很多时候,当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");