Type Filter Attribute

[TypeFilter("GetFilteredTypeList")] public BaseClass A, B; [TypeFilter("GetFilteredTypeList")] public BaseClass[] Array = new BaseClass[3]; public IEnumerable<Type> GetFilteredTypeList() { var q = typeof(BaseClass).Assembly.GetTypes() .Where(x => !x.IsAbstract) // Excludes BaseClass .Where(x => !x.IsGenericTypeDefinition) // Excludes C1<> .Where(x => typeof(BaseClass).IsAssignableFrom(x)); // Excludes classes not inheriting from BaseClass // Adds various C1<T> type variants. q = q.AppendWith(typeof(C1<>).MakeGenericType(typeof(GameObject))); q = q.AppendWith(typeof(C1<>).MakeGenericType(typeof(AnimationCurve))); q = q.AppendWith(typeof(C1<>).MakeGenericType(typeof(List<float>))); return q; } public abstract class BaseClass { public int BaseField; } public class A1 : BaseClass { public int _A1; } public class A2 : A1 { public int _A2; } public class A3 : A2 { public int _A3; } public class B1 : BaseClass { public int _B1; } public class B2 : B1 { public int _B2; } public class B3 : B2 { public int _B3; } public class C1<T> : BaseClass { public T C; }