如何利用委托来优化switch case语句

cpt_adt2010 2011-12-04 11:29:54
比如Action<T>或者Fun<T>来优化大量条件判断的switch case 语句
...全文
290 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2011-12-05
  • 打赏
  • 举报
回复
还有个办法是设计模式的模板模式:
void foo(int type)
{
dosth1();
switch (type)
{
case 0:
Console.WriteLine("0");
break;
case 1:
Console.WriteLine("1");
break;
}
dosth2();
}
foo(0);
foo(1);

转化为
void foo(MethodBase mb)
{
dosth1();
mb.Do();
dosth2();
}

class MethodBase
{
public virtual void Do() { }
}
class Method0 : MethodBase
{
public override void Do() { Console.WriteLine("0"); }
}
class Method1 : MethodBase
{
public override void Do() { Console.WriteLine("1"); }
}

foo(new Method0());
foo(new Method1());


顺便说一下,WinForms在将消息处理分支转化为Control对象成员的时候,就是使用的模板模式。
你可以重写 WndProc() 来改变消息处理。
threenewbee 2011-12-05
  • 打赏
  • 举报
回复
(1)设计模式中的策略模式:
void foo(int type)
{
dosth1();
switch (type)
{
case 0:
Console.WriteLine("0");
break;
case 1:
Console.WriteLine("1");
break;
}
dosth2();
}
foo(0);
foo(1);

转化为:
void foo(Action action)
{
dosth1();
action();
dosth2();
}
foo(() => Console.WriteLine("0"));
foo(() => Console.WriteLine("1"));
阿非 2011-12-05
  • 打赏
  • 举报
回复
private Dictionary<bool, Action> dic;  

//确认时执行的代码
private void Confirm()
{
lit.Text = "确认";
}

//取消时执行的代码
private void Cancel()
{
lit.Text = "取消";
}

//赋值
dic = new Dictionary<bool, Action>();

dic.Add(true, Confirm);
dic.Add(false, Cancel);

//调用
dic[result]();


引自 confirm 确认框的一个实际应用(续)

http://blog.csdn.net/sandy945/article/details/5716632
阿非 2011-12-05
  • 打赏
  • 举报
回复
看链接
cpt_adt2010 2011-12-05
  • 打赏
  • 举报
回复
一楼,dic[result](); 调用具体是怎样的呢,希望举个例子

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧