c# - 如何在 C# 中将多个函数作为约束参数传递?

标签 c# linq .net-4.0 methods delegates

对于我正在尝试学习的内容,这可能是一个措辞不当的问题,所以我将解释我正在尝试做什么。我使用以下表达式创建了以下列表:

var showIndexes = from item in lItems
                               where WildcardString.IsMatch(item.RecordId.ToString(), filter) ||
                                     WildcardString.IsMatch(item.Tokens.ToString(), filter) ||
                                     WildcardString.IsMatch(string.Format("{0}:{1}", item.OwnerID.SystemName, item.OwnerID.Port.ToString()), filter) ||
                                     WildcardString.IsMatch(item.ChildID.UserName, filter) ||
                                     WildcardString.IsMatch(item.TypeOfLicense.ToString(), filter) ||
                                     WildcardString.IsMatch(item.ExpiryTime.DateTime.ToLocalTime().ToString(), filter)
                               select item.RecordId.ToString();

我想将此表达式放入一个函数中,并将“where”中使用的约束作为单个参数传入。我如何实现这一目标?在处理文件属性时(当您选择不同的属性枚举时),我已经看到使用按位或的类似功能,所以我相信应该可以编写我自己的函数,它将一组委托(delegate)作为“where”规则。

如果相关,WildcardString.IsMatch(string, string) 是一个 bool 函数。此外,我有三个不同的函数执行完全相同的事情,但在不同的列表上,这就是为什么我想学习如何将其简化为一个函数,并只传递列表和选择规则。

最佳答案

简单地定义一个谓词:一个接受 item 的函数并返回一个 bool 值。

假设item类型为 Recordfilter在范围内:

Func<Record, bool> predicate = r =>
    WildCardString.IsMatch(r.RecordId.ToString(), filter) ||
    WildCardString.IsMatch(...);

然后您可以处理 predicate作为一等值(存储它,将其作为参数传递等)并过滤任何 IEnumerable<Record>

var filtered = enumerable.Where(predicate);

关于c# - 如何在 C# 中将多个函数作为约束参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14584210/

相关文章:

sql - 使用Lambda表达式检查字符串值是否包含任何数字

asp.net - 在 IIS 7.5 Express 中使用 ASP.Net 预加载器

asp.net - 通过 ASP.NET、Windows 身份验证和模拟,使用智能卡的私钥对数据进行签名

c# - windows 7 控制麦克风播放音量

c# - 在 LINQ to SQL 中执行查询

linq - 对 Enumerable<T> 中的所有元素执行特定操作

asp.net-mvc-2 - 多个项目的区域 - 在子项目中找不到 View

c# - 使用C#的多线程实践和方法

c# - 如何跨越多个程序集的 C# 命名空间?

c# - 如何将 DataGridViewComboBoxCell 转换为 DataGridViewTextBoxCell