S7Explorer/LinqExtensions.cs

69 lines
1.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
namespace S7Explorer
{
/// <summary>
/// Extensiones LINQ para funcionalidades específicas de la aplicación
/// </summary>
public static class LinqExtensions
{
/// <summary>
/// Cuenta elementos en una colección que cumplen un predicado
/// </summary>
public static int Count<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
if (source == null)
return 0;
return source.Where(predicate).Count();
}
/// <summary>
/// Verifica si una colección contiene al menos un elemento
/// </summary>
public static bool Any<T>(this IEnumerable<T> source)
{
if (source == null)
return false;
return source.Any(item => true);
}
/// <summary>
/// Verifica si una colección contiene al menos un elemento que cumpla un predicado
/// </summary>
public static bool Any<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
if (source == null)
return false;
using (var enumerator = source.GetEnumerator())
{
while (enumerator.MoveNext())
{
if (predicate(enumerator.Current))
return true;
}
}
return false;
}
/// <summary>
/// Selecciona elementos de una colección que cumplen un predicado
/// </summary>
public static IEnumerable<T> Where<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
if (source == null)
yield break;
foreach (var item in source)
{
if (predicate(item))
yield return item;
}
}
}
}