Code/TypeExtensions.cs
using System;
internal static class TypeExtensions // TODO: remove and use one from ExtendedBox Library
{
public static bool IsAssignableToGenericType(this Type givenType, Type genericType)
{
if(TypeLibrary.GetType(genericType) is null)
throw new InvalidOperationException($"Using TypeLibrary with type {genericType.FullName} is blocked by whitelist.");
var interfaceTypes = givenType.GetInterfaces();
foreach(var interfaceType in interfaceTypes)
{
if(interfaceType.IsGenericType)
{
var genericTypeDefinition = TypeLibrary.GetType(interfaceType)?.TargetType;
if(genericTypeDefinition is not null && genericTypeDefinition == genericType)
return true;
}
}
if(givenType.IsGenericType)
{
var genericTypeDefinition = TypeLibrary.GetType(givenType)?.TargetType;
if(genericTypeDefinition is not null && genericTypeDefinition == genericType)
return true;
}
Type? baseType = givenType.BaseType;
if(baseType == null)
return false;
return IsAssignableToGenericType(baseType, genericType);
}
}