如何利用委托来优化switch case语句 比如Action<T>或者Fun<T>来优化大量条件判断的switch case 语句 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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 (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")); 还有个办法是设计模式的模板模式: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() 来改变消息处理。 一楼,dic[result](); 调用具体是怎样的呢,希望举个例子 正则表达式匹配嵌套连接 ??? 大侠们???? 急求 CMPP2.0 CMPP_CNNECT认证错 c# winform中datagridview如何向单元格添加多个按钮 获得登录窗体的用户名,并在另一窗体load时显示? xna 怎么做普通windows游戏手柄的操作啊。(非xbox360手柄)请高手下啊 用vs2005开发存储过程遇到的数据库连接失败的问题 继承控件时遇到的疑问 我想做一个简单的多文本编辑器,不知道要用那个控件?(新手) 问个正则表达式的问题 这个存储过程怎么调用啊?请帮忙.在线等.... 求代码,带数据库和源代码,分数不成问题,需要的说 wpf 类vs的mdi窗体实现
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
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"));
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() 来改变消息处理。