예제 #1
0
 private static void FilterTypes(Assembly assembly, SystemTypeAttribute filter, ICollection <Type> excludedTypes, List <Type> output)
 {
     output.AddRange(from type in assembly.GetTypes()
                     let isValid = (type.IsValueType && !type.IsEnum) || type.IsClass
                                   where type.IsVisible && isValid
                                   where (FilterConstraintOverride == null || FilterConstraintOverride.Invoke(type)) &&
                                   (filter == null || filter.IsConstraintSatisfied(type))
                                   where excludedTypes == null || !excludedTypes.Contains(type)
                                   select type);
 }
        private static void FilterTypes(Assembly assembly, SystemTypeAttribute filter, ICollection <Type> excludedTypes, List <Type> output)
        {
            foreach (var type in assembly.GetLoadableTypes())
            {
                bool isValid = type.IsValueType && !type.IsEnum || type.IsClass;
                if (!type.IsVisible || !isValid)
                {
                    continue;
                }

                if (filter != null && !filter.IsConstraintSatisfied(type))
                {
                    continue;
                }

                if (excludedTypes != null && excludedTypes.Contains(type))
                {
                    continue;
                }

                output.Add(type);
            }
        }