程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> [C# 3.0 入門] [第一章 Lambda表達式] 第二節:Lambda表達式帶來了什麼(3)

[C# 3.0 入門] [第一章 Lambda表達式] 第二節:Lambda表達式帶來了什麼(3)

編輯:關於C語言

List 4 對List 3的菜單項進行修正

這樣,需要的信息都能夠包含在數組裡了。

構建菜單的方法是,通過檢查被選擇的菜單對象的FromHour的值,如果與現在時間相比小,就把該菜單項顯示出來。

這麼看來,這個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. 下一頁:
Copyright © 程式師世界 All Rights Reserved