MehCode/Util/IListExtensions.cs
namespace Nodebox;
public static class IListExtensions {
public static void Resize<T>(this IList<T> list, int size) {
Resize(list, size, (_) => default);
}
public static void Resize<T>(this IList<T> list, int size, Func<int, T> generator) {
ArgumentNullException.ThrowIfNull(list);
ArgumentOutOfRangeException.ThrowIfNegative(size);
if (list.Count == size) return;
if (size > list.Count) {
if (list is List<T> genericList) {
genericList.AddRange(Enumerable.Range(0, size - list.Count).Select(generator));
}
else {
while (list.Count < size)
list.Add(generator(list.Count));
}
} else {
if (list is List<T> genericList) {
genericList.RemoveRange(size, list.Count - size);
}
else {
while (list.Count > size)
list.RemoveAt(list.Count - 1);
}
}
}
}