如何编写Or扩展方法

时间:2010-10-28 10:13:37

标签: linq

我想做

var testData = new[] { "aap", "aal", "noot", "mies", "wim", "zus", "jet" };
bool result = testData.Or(s => s.Contains("z"));

但IEnumerable上没有'或'方法。

我尝试使用

编写Or扩展方法
public static class extensions
{
    public static bool Or<TSource>(this IEnumerable<TSource> sourceCollection, Func<TSource, bool> selector)
    {
        return sourceCollection.Where(selector).Select(selector).FirstOrDefault();
    }
}

当然,我们的想法是不要经常调用selector()。第一次评估为true的调用确定结果。我的解决方案的问题是在第一个返回true的项目上调用了selector()两次。我想这是因为调用了Select()。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

var testData = new[] { "aap", "aal", "noot", "mies", "wim", "zus", "jet"};
bool result = testData.Any(s => s.Contains("z"));

这将在第一场比赛中停止评估,如你所愿。

答案 1 :(得分:1)

我不确定我是否了解您的问题,但是Linq扩展方法Any是否符合您的目标?