Mic*_*own 2 c# linq strategy-pattern pattern-matching
这是我试图优雅地解决的一个案例。假设我有一个可枚举(它可能是一个相当大的可枚举,我只想枚举一次)。还可以说,如果序列中返回的对象与操作的某些条件匹配,我想要运行特定的操作。
在函数式语言中,我可以设置一系列匹配项,当找到匹配项时将执行这些匹配项。我想要在 C# 中实现类似的功能。如果可能的话使用 LINQ。
我最接近的是使用策略模式和一个简单的规则引擎,该引擎按顺序调用每个注册的策略,直到找到匹配项。有没有更简单的方法?
我想做的一件事是。
myEnum.Match((item)=>item.MatchesCondition, (item)=>ExecuteFunction(item))
.Match((item)=>item.MatchesSomeOtherCondition, (item)=>ExecuteSomeOtherFunction(item));
Run Code Online (Sandbox Code Playgroud)
您可以创建一个扩展方法 Match:
public static class Extensions
{
public static IEnumerable<T> Match<T>(this IEnumerable<T> items, Func<T, bool> condition, Action<T> action)
{
foreach (T item in items)
{
if (condition(item))
{
action(item)
}
else
{
yield return item;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这将循环遍历itemsand 中的每个项目:
action| 归档时间: |
|
| 查看次数: |
448 次 |
| 最近记录: |