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;
}
}
}