コード例 #1
0
        private static void Main()
        {
            const string extensionsSuffix = "Extensions";

            var stringBuilderPool = new DefaultObjectPoolProvider()
                                    .CreateStringBuilderPool();

            var extensionGroups = typeof(DependencyObjectExtensions).Assembly
                                  .GetExportedTypes()
                                  .Where(x => x.Name.EndsWith(extensionsSuffix))
                                  .GroupBy(x =>
            {
                // ReSharper disable once PossibleNullReferenceException
                var groupSeparatorIndex = x.Namespace.LastIndexOf('.');
                return(x.Namespace.Substring(groupSeparatorIndex + 1));
            }, x => (x.Name, Funcs: x.GetMethods(BindingFlags.Public | BindingFlags.Static)))
                                  .OrderBy(x => x.Key)
                                  .Select(grouping =>
            {
                var classes = grouping
                              .Select(x =>
                {
                    var funcNames = x.Funcs
                                    .Select(y => y.Name)
                                    .Distinct()
                                    .OrderBy(y => y);

                    return(stringBuilderPool.Get()
                           .AppendFormat(" - **{0}** - ", x.Name.Replace(extensionsSuffix, string.Empty))
                           .AppendJoin(", ", funcNames)
                           .ToString());
                });

                return(stringBuilderPool.Get()
                       .AppendFormat("### {0} extensions:", grouping.Key)
                       .AppendLine()
                       .AppendJoin(';' + Environment.NewLine, classes)
                       .ToString());
            });

            var description = stringBuilderPool.Get()
                              .AppendJoin('.' + Environment.NewLine + Environment.NewLine, extensionGroups)
                              .Append('.')
                              .ToString();
        }