函數當參數傳遞有什麼用??

來源:互聯網
上載者:User

最近和一位同事說下Linq,我提到Linq裡很多方法表面來看是把原先不怎麼常用的一種技巧正式化了下,就是把函數當參數傳遞,同事有點不理解,或者這樣說,在工作中這有什麼用處.

我這裡給出二種簡單比較常用的用法.

1.填充多Execl去重複代碼.

這裡想法比較簡單,也很容易想到,我有時匯出幾份Execl時,那麼相應的就會有開啟Execl,填充Execl,關閉儲存Execl這三步.

但是這幾份Execl裡,開啟Execl,關閉儲存Execl是相同的.我們代碼工人都知道不要寫重複代碼.那麼好,封裝吧.........

但是關鍵是填充Execl這步不一樣,怎麼做(不要告訴我用設計模式來封裝多種模式,然後用不同模式來填充啊.)很簡單,

因為填充Execl不一樣,也就是說,要填充的Execl表格Worksheet不一樣,在這裡就可以把函數當參數傳遞.如下.

public string OnAction(params Action<Worksheet>[] actions)

{

      //開啟Execl

    for(int i = 0;i < actions.Length;i++) 

  { 

    wsheet = myExecl.Worksheets.getItem(i+1);

    //在這裡填充相應的Execl表格Worksheet,至於怎麼填充的,就看你相對應的action[i]方法的實現了.

    action[i](wsheet);

  }

  //關閉儲存Execl

}

2.ASP.NET 寫的 泛型委派在項目中的應用.

這裡給我們展示了一種情境.

具體情境:在用戶端調用WCF服務時,我們都需要在客戶做異常處理,最常見的錯誤異常為CommunicationException,TimeoutException,Exception.

通常我們只能執行這個方法,然後捕獲異常.一個二個方法沒什麼.如果到達10個會怎麼樣,還不說100的時候.你的項目裡就全是那些一模一樣的Try{}Catch{}.

幸好,作者給了我們一種處理方法.

把方法作為一個對象來考慮,我只考慮方法執行的異常情況,你怎麼處理我不管.如下.

public static void Invoke<TContract>(TContract proxy, Action<TContract> action)
{

  try{

    action(proxy));

  }

     catch()

  {

  }

  catch()

  {

  }

}

這樣整個世界清靜了.

 

PS:說實話,理論上的講解很麻煩,我只有更多從執行個體來說.有理解錯誤的地方,大家請指出.謝謝.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.