<PackageReference Include="Namotion.Reflection" Version="3.4.2" />

EnumerableExtensions

public static class EnumerableExtensions
IEnumerable extensions.
using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; namespace Namotion.Reflection { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] public static class EnumerableExtensions { [IteratorStateMachine(typeof(<GetAssignableToTypeName>d__0<>))] public static IEnumerable<T> GetAssignableToTypeName<[System.Runtime.CompilerServices.Nullable(2)] T>(this IEnumerable<T> objects, string typeName, TypeNameStyle typeNameStyle = TypeNameStyle.FullName) { <GetAssignableToTypeName>d__0<T> <GetAssignableToTypeName>d__ = new <GetAssignableToTypeName>d__0<T>(-2); <GetAssignableToTypeName>d__.<>3__objects = objects; <GetAssignableToTypeName>d__.<>3__typeName = typeName; <GetAssignableToTypeName>d__.<>3__typeNameStyle = typeNameStyle; return <GetAssignableToTypeName>d__; } [System.Runtime.CompilerServices.NullableContext(2)] public static T FirstAssignableToTypeNameOrDefault<T>([System.Runtime.CompilerServices.Nullable(new byte[] { 2, 1 })] this IEnumerable<T> objects, [System.Runtime.CompilerServices.Nullable(1)] string typeName, TypeNameStyle typeNameStyle = TypeNameStyle.FullName) { T[] array = objects as T[]; if (array != null) { T[] array2 = array; for (int i = 0; i < array2.Length; i++) { T result = array2[i]; if (result.GetType().IsAssignableToTypeName(typeName, typeNameStyle)) return result; } } else if (objects != null) { foreach (T object in objects) { if (object.GetType().IsAssignableToTypeName(typeName, typeNameStyle)) return object; } } return default(T); } public static Type GetCommonBaseType(this IEnumerable<Type> types) { types = types.ToList(); Type baseType = types.First(); while (baseType != typeof(object) && baseType != (Type)null) { if (types.All((Type t) => baseType.GetTypeInfo().IsAssignableFrom(t.GetTypeInfo()))) return baseType; baseType = baseType.GetTypeInfo().BaseType; } return typeof(object); } [System.Runtime.CompilerServices.NullableContext(2)] internal static T GetSingleOrDefault<T>([System.Runtime.CompilerServices.Nullable(1)] this Attribute[] attributes) { T val = default(T); foreach (Attribute attribute in attributes) { if (attribute is T) { T val2 = attribute as T; if (val != null) <GetSingleOrDefault>g__ThrowInvalidOperation|3_0<T>(); val = val2; } } return val; } } }