Code/Utility/EnumerableExtensions.cs
namespace Marker3d.Utility.Extensions;
public static class EnumerableExtensions {
public static void ForEach<T>(this IEnumerable<T> self, Action<T> action) {
foreach (T item in self) action(item);
}
public static IEnumerable<TResult> SelectWhere<TSource, TResult>(this IEnumerable<TSource> self, Func<TSource, TResult?> action) where TResult : struct {
return self.SelectMany(x => {
var result = action(x);
return result == null ? Enumerable.Empty<TResult>() : [result.Value];
});
}
public static int HashCombine<T>(this IEnumerable<T> self) {
var result = 0;
foreach (var el in self) {
result = HashCode.Combine(result, el);
}
return result;
}
}