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

8

我有:

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

我有很多这样的函数。我想编写通用函数,并将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();        
}

什么是???????????????的缩写?

提前致谢。


谢谢@reinierpost,我刚刚修复了“initialize”拼写错误。 - Michał Kuliński
2个回答

15

Func<Entry, bool> predicate 应该能够正常工作,其中 Entryentry 变量的类型。


这个Entry类需要包含哪个命名空间/库? - thanatorr
@thanatorr - Entry 是自定义的枚举类型。 - Michał Kuliński
1
@MichałKuliński 是的,我现在已经弄清楚了,不过还是谢谢你! - thanatorr

8
你可以这样做:
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();

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接