static IEnumerable <Type> GetConstructableTypes(Type type)
        {
            if (TypeConstruction.CanBeConstructed(type))
            {
                yield return(type);
            }

            foreach (var t in UnityEditor.TypeCache.GetTypesDerivedFrom(type).Where(TypeConstruction.CanBeConstructed))
            {
                yield return(t);
            }
        }
        static IEnumerable <Type> GetConstructableTypes <TType>()
        {
            if (TypeConstruction.CanBeConstructed <TType>())
            {
                yield return(typeof(TType));
            }

            foreach (var type in UnityEditor.TypeCache.GetTypesDerivedFrom <TType>().Where(TypeConstruction.CanBeConstructed))
            {
                yield return(type);
            }
        }