Memory-Efficient LINQ Extensions
public static class OptimizedLinqExtensions
{
public static bool AnyFast<T>(this ICollection<T> collection)
{
return collection != null && collection.Count > 0;
}
public static bool AnyFast<T>(this ICollection<T> collection, Func<T, bool> predicate)
{
if (collection == null || predicate == null) return false;
foreach (var item in collection)
{
if (predicate(item)) return true;
}
return false;
}
public static T FirstOrDefault<T>(this IEnumerable<T> collection, T defaultValue)
{
if (collection == null) return defaultValue;
foreach (var item in collection)
{
return item;
}
return defaultValue;
}
public static IEnumerable<T> TakeFast<T>(this IEnumerable<T> collection, int count)
{
if (collection == null || count <= 0) yield break;
var taken = 0;
foreach (var item in collection)
{
if (taken >= count) yield break;
yield return item;
taken++;
}
}
}