2011-02-16 40 views
0

使用lambda表達式見我有此示例代碼的方法調用

_service.GetCustomers((customers, error) => 
      { 
      if (error != null) 
      {      
       MessageBox.Show(error.Message); 
       return; 
      } 

      Customers = new ObservableCollection<CustomerViewModel>(customers); 
      IsBusy = false; 
      }); 

如果我是做一個類似的功能調用,它接受更多的參數怎麼會是這樣另一功能。函數的定義是這樣的

GetCustomers(DateTime sTime, int ID, Action<IEnumerable<CustomerViewModel>, Exception> callback) 

那麼如何使用lambda表達式調用上述函數呢?

回答

2

Lambda表達式爲這是在引入C#2.0行動<Ť匿名委託速記>和它的兄弟姐妹是通用的委託。無論何時您看到類型爲Action的參數< T>您都可以使用採用等效參數的lambda來替換它。在這種情況下,它將是

service.GetCustomers(sometime, someId, (viewmodels, exception)=>{/*handle callback here*/}); 
+0

其他通用代表存在嗎?旁邊的Func <> – 2011-02-16 08:15:02

2
_service.GetCustomers(datetime, id, (customers, error) => ..... 
... same as before 
2

只需像以前一樣傳遞您的匿名代理以及其他參數即可。

_service.GetCustomers(datetime, id, (customers, error) => { 

        if (error != null) 
        {      
         MessageBox.Show(error.Message); 
         return; 
        } 

        Customers = new ObservableCollection<CustomerViewModel>(customers); 
        IsBusy = false; 

       });