using System; using System.Collections; using System.Collections.Generic; using System.Linq; namespace KitsuneCafe.Extension { public static class CollectionExtension { public static bool HasIndex(this IList list, int index) { return index >= 0 && index < list.Count; } public static IEnumerable<(T, int)> Enumerate(this IEnumerable enumerable) { return enumerable.Select((x, i) => (x, i)); } public static bool IsTypeOf() { return IsTypeOf(typeof(T), typeof(U)); } public static bool IsTypeOf(this object value) { return IsTypeOf(value.GetType(), typeof(T)); } public static bool IsTypeOf(this object value, Type type) { return IsTypeOf(value.GetType(), type); } public static bool IsTypeOf(this Type type) { if (type == null) { return false; } return IsTypeOf(type, typeof(T)); } public static bool IsTypeOf(this Type type, Type other) { if (type == null || other == null || !other.IsGenericTypeDefinition) { return false; } return other.IsGenericType && other.GetGenericTypeDefinition() == type; } public static Type GetGenericArgument(this object value) { if (value == null) { return null; } var type = value.GetType(); var args = type.GetGenericArguments(); return args.Length > 0 ? args[0] : null; } } }