2015-12-21 66 views
-1

我有點困惑以下語句的含義是什麼。Linq Func的參數

List<Func<GroupInfoInfo, bool>>() 

Groups.Instance.GetGroup(2, grp => TestPredicateGroup(whereCls, grp)); 

private static bool TestPredicateGroup(List<Func<GroupInfoInfo, bool>> predicates, GroupInfoInfo ri) 
{ 
    foreach (var p in predicates) 
    { 
     if (!p(ri)) 
     { 
      return false; 
     } 
    } 
    return true; 
} 

我想知道什麼是List<Func<GroupInfoInfo, bool>>()的功能if (!p(ri))的意義和陳述?

GetGroup() lambda表達式也有些混亂。

+0

[列表](https://msdn.microsoft.com/en-us/library/6sh2ey19(V = vs.110)的.aspx)是在'C#''一個通用Collection'類型。 –

+0

'predicates'是一個返回布爾值的函數列表。因此,它是正確的給他們打電話的'foreach'這樣!?'P(RI)' –

回答

4

List<Func<RoleInfo, bool>>是以RoleInfo作爲唯一參數並返回bool的函數列表。

foreach (var p in predicates)遍歷所有功能(謂詞),它們分配給p並用!p(ri)檢查它們。

!p(ri)實際上是調用方法/委託(分配給變量p),給出第一個參數ri這是一個RoleInfo。其結果是否定的,所以如果它返回false,該if的結果是true。在這種情況下,它將返回false。否則它會繼續下一個測試,直到它檢查完所有的謂詞。如果他們都返回true,該TestPredicateGroup方法的最終結果是true

+0

P(RI)上現場執行,我想問問關於p.rsid的ID和ri.rsid? – skiskd

+0

'p'只是一個方法'(ri)'只是傳遞方法上的參數。 'p'不會有'rsid','ri'可能。 –