如何在C#中将谓词传递给函数?

Mic*_*ski 6 c# asp.net predicate c#-4.0

我有 :

 public void InitializeStatusList(DropDownList list)
    {
       var dictionaryEntries = GetEntriesFromDatabase();
       list.DataSource = dictionaryEntries.Where(entry => entry is EntryStatus1 || entry is EntryStatus2);
       list.DataBind();           
    }
Run Code Online (Sandbox Code Playgroud)

我有很多这样的功能.我想用dictionaryEntries查询条件作为谓词传递来编写通用函数.

例如:

public void InitializeStatusList(DropDownList list)
{
    CommonInitializeStatusList(DropDownList list, entry => entry is EntryStatus1 || entry is EntryStatus2);
}

public void CommonInitializeStatusList(DropDownList list, ??????????????? predicate)
{                       
    var dictionaryEntries = GetEntriesFromDatabase();
    list.DataSource = dictionaryEntries.Where(predicate);
    list.DataBind();        
}
Run Code Online (Sandbox Code Playgroud)

什么代表什么 ???????????????

提前致谢

Mar*_*icz 14

Func<Entry, bool> predicate应该工作,变量的Entry类型在哪里entry.


小智 7

你可以这样做:

public void InitializeStatusList(DropDownList list)
{    
    Func<Entry,bool> predicate=entry=>entry is EntryStatus1 || entry is EntryStatus2;
    CommonInitializeStatusList(list, predicate);
}

public void CommonInitializeStatusList(DropDownList list, Func<Entry,bool> predicate)
{                                 
    var dictionaryEntries = GetEntriesFromDatabase();    
    list.DataSource = dictionaryEntries.Where(predicate);
    list.DataBind();

}
Run Code Online (Sandbox Code Playgroud)