WEB开发网
开发学院软件开发C语言 [C# 3.0 入门] [第一章 Lambda表达式] 第二节:La... 阅读

[C# 3.0 入门] [第一章 Lambda表达式] 第二节:Lambda表达式带来了什么

 2010-09-30 20:59:53 来源:WEB开发网   
核心提示: 这么看来,这个code如果按照YAGNI*的原则来看的话就比较完善了,[C# 3.0 入门] [第一章 Lambda表达式] 第二节:Lambda表达式带来了什么(3),这样的代码也属于良品了,* YAGNI是“You Aren't Going to Need It.&rdq

这么看来,这个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

上一页  1 2 3 4  下一页

Tags:入门 第一章 Lambda

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接