class Program
{
static void Sample(Action<string> action)
{
if (action != null) action("Hello!");
}
static void Main()
{
Action<string> action = null;
Sample(action); // 無輸出
action = x => Console.WriteLine(x);
Sample(action); // 輸出 Hello!
}
}
需檢查 null,呼叫端與實作端皆增加防禦性代碼。
Action<string> action = (x) => { }; // 空語句本體
static void Sample(Action<string> action)
{
action("Hello!"); // 直接呼叫,無需 null 檢查
}
Sample(action); // 無輸出,不拋例外
action = x => Console.WriteLine(x);
Sample(action); // 輸出 Hello!
優點:消除 null 檢查,程式碼更簡潔,符合「空物件模式」精神。
回放使用者操作生成報表時,需禁用所有輸出相關處理以提升效率。將輸出委派設為空 Lambda () => { },無需在每個呼叫點加 if 判斷,原始碼保持乾淨,隨時可切換啟用/禁用。