@@ -312,13 +312,14 @@ public static T[] Remove<T>(ref T[] source, Predicate<T> predicate)
312312 }
313313
314314 /// <summary>
315- /// 输入数组中的每个值传给回调函数,如果回调函数返回 true ,则把输入数组中的当前值加入结果数组中
315+ /// 输入数组中的每个值传给回调函数,如果回调函数和期望值(<paramref name="expected"/>)相等 ,则把输入数组中的当前值加入结果数组中
316316 /// </summary>
317317 /// <typeparam name="T">数组类型</typeparam>
318318 /// <param name="source">规定数组</param>
319319 /// <param name="predicate">回调函数</param>
320+ /// <param name="expected">回调函数的期望值</param>
320321 /// <returns>需求数组</returns>
321- public static T [ ] Filter < T > ( T [ ] source , Predicate < T > predicate )
322+ public static T [ ] Filter < T > ( T [ ] source , Predicate < T > predicate , bool expected = true )
322323 {
323324 Guard . Requires < ArgumentNullException > ( source != null ) ;
324325 Guard . Requires < ArgumentNullException > ( predicate != null ) ;
@@ -327,7 +328,7 @@ public static T[] Filter<T>(T[] source, Predicate<T> predicate)
327328 var i = 0 ;
328329 foreach ( var result in source )
329330 {
330- if ( predicate . Invoke ( result ) )
331+ if ( predicate . Invoke ( result ) == expected )
331332 {
332333 elements [ i ++ ] = result ;
333334 }
@@ -338,21 +339,22 @@ public static T[] Filter<T>(T[] source, Predicate<T> predicate)
338339 }
339340
340341 /// <summary>
341- /// 将规定迭代器中的每个值传给回调函数,如果回调函数返回 true ,则把规定迭代器中的当前值加入结果数组中
342+ /// 将规定迭代器中的每个值传给回调函数,如果回调函数和期望值(<paramref name="expected"/>)相等 ,则把规定迭代器中的当前值加入结果数组中
342343 /// </summary>
343344 /// <typeparam name="T">数组类型</typeparam>
344345 /// <param name="source">规定迭代器</param>
345346 /// <param name="predicate">回调函数</param>
347+ /// <param name="expected">回调函数的期望值</param>
346348 /// <returns>需求数组</returns>
347- public static T [ ] Filter < T > ( IEnumerable < T > source , Predicate < T > predicate )
349+ public static T [ ] Filter < T > ( IEnumerable < T > source , Predicate < T > predicate , bool expected = true )
348350 {
349351 Guard . Requires < ArgumentNullException > ( source != null ) ;
350352 Guard . Requires < ArgumentNullException > ( predicate != null ) ;
351353
352354 var results = new List < T > ( ) ;
353355 foreach ( var result in source )
354356 {
355- if ( predicate . Invoke ( result ) )
357+ if ( predicate . Invoke ( result ) == expected )
356358 {
357359 results . Add ( result ) ;
358360 }
0 commit comments