[C# 3.0 入门] [第一章 Lambda表达式] 第二节:Lambda表达式带来了什么
2010-09-30 20:59:53 来源:WEB开发网这么看来,这个code如果按照YAGNI*的原则来看的话就比较完善了,这样的代码也属于良品了。
* YAGNI是“You Aren't Going to Need It.”的简写,意思是:或许是必要的功能实际上并不必要的可能性非常高。一句话,为未知的未来而事先准备的代码,基本上是没用的。这样的教训很多。
但是,这个代码来应对需求变更的要求,恐怕还太脆弱。例如,条件如果从19点改为19点半,就没法办了。或者要求设置个结束时间,或者是个时间段的话,或是根据星期几而变动,这种要求实在是太多了。
琢磨了一下要求,加入能够指定条件的代码,修正后如下:
1public delegate bool SimpleMenuAvailability();
2
3public class MenuItemC
4{
5 public readonly string Name;
6 public readonly SimpleMenuAction Action;
7 // 判断现在是否是有效菜单项
8 public readonly SimpleMenuAvailability IsAvailable;
9
10 public MenuItemC(string name, SimpleMenuAction action, SimpleMenuAvailability isAvailable)
11 {
12 Name = name;
13 Action = action;
14 IsAvailable = isAvailable;
15 }
16}
17
List5 加上条件的菜单定义
如果使用匿名方法,数组就要改写成如下:
Menu
1private static MenuItemC[] MenuItems3 =
2 {
3 new MenuItemC(
4 "选择1", 执行方法, delegate() { return true; }),
5 new MenuItemC(
6 "选择2", 执行方法, delegate() { return true; }),
7 new MenuItemC(
8 "选择3", 执行方法, delegate() { return true; }),
9 new MenuItemC(
10 "选择4", 执行方法, delegate() { return DateTime.Now.Hour >= 19; } ),
11 };
12
更多精彩
赞助商链接