2010-10-28 46 views
1

我想做如何编写一个或扩展方法

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

但对的IEnumerable没有“或”方法。

我试着使用编程

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

Ofcourse的或扩展方法,这个想法是不是往往需要调用选择()。第一次评估为真确定结果。我的解决方案的问题是selector()在第一个返回true的项上调用两次。我想这是因为对Select()的调用。

我该如何解决这个问题?

+2

'Or'应该做什么?你可能在寻找'Any()'? – Jens 2010-10-28 10:16:01

回答

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

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

+0

啊,是的!就这么简单! \谢谢 – 2010-10-28 12:26:25

1

我不确定我是否理解您的问题,但是Linq扩展方法Any做了您想要实现的功能吗?