LINQ 是否有类似 Match 的语法

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)

Fer*_*oto 5

您可以创建一个扩展方法 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 中的每个项目: