当前位置: 首页>>代码示例>>C#>>正文


C# IReadOnlyList.ToLookup方法代码示例

本文整理汇总了C#中IReadOnlyList.ToLookup方法的典型用法代码示例。如果您正苦于以下问题:C# IReadOnlyList.ToLookup方法的具体用法?C# IReadOnlyList.ToLookup怎么用?C# IReadOnlyList.ToLookup使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在IReadOnlyList的用法示例。


在下文中一共展示了IReadOnlyList.ToLookup方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: OrderAndMapRules

        static IReadOnlyDictionary<string, IReadOnlyList<Export<IStyleRule, StyleRuleMetadata>>> OrderAndMapRules(
            IReadOnlyList<Export<IStyleRule, StyleRuleMetadata>> rules)
        {
            var languageRuleMap = new Dictionary<string, IReadOnlyList<Export<IStyleRule, StyleRuleMetadata>>>();

            ILookup<string, Export<IStyleRule, StyleRuleMetadata>> languageRuleLookup =
                rules.ToLookup(r => r.Metadata.LanguageName);
            foreach (IGrouping<string, Export<IStyleRule, StyleRuleMetadata>> languageRules in languageRuleLookup)
            {
                var graph = new DirectedGraph<Export<IStyleRule, StyleRuleMetadata>>(languageRules);

                Dictionary<string, Export<IStyleRule, StyleRuleMetadata>> nameRuleMap =
                    languageRules.ToDictionary(r => r.Metadata.Name);
                foreach (Export<IStyleRule, StyleRuleMetadata> languageRule in languageRules)
                {
                    foreach (string afterName in languageRule.Metadata.AfterNames)
                    {
                        Export<IStyleRule, StyleRuleMetadata> afterRule;
                        if (nameRuleMap.TryGetValue(afterName, out afterRule))
                        {
                            graph.AddEdge(afterRule, languageRule);
                        }
                    }

                    foreach (string beforeName in languageRule.Metadata.BeforeNames)
                    {
                        Export<IStyleRule, StyleRuleMetadata> beforeRule;
                        if (nameRuleMap.TryGetValue(beforeName, out beforeRule))
                        {
                            graph.AddEdge(languageRule, beforeRule);
                        }
                    }
                }

                IReadOnlyList<Export<IStyleRule, StyleRuleMetadata>> cycle = graph.FindCycle();
                if (cycle.Count > 0)
                {
                    var ruleNames = String.Join(", ", cycle.Select(r => r.Metadata.Name));
                    throw new InvalidOperationException($"Dependency cycle exists in rules {ruleNames}");
                }

                languageRuleMap.Add(languageRules.Key, graph.Sort());
            }

            return languageRuleMap;
        }
开发者ID:nicholjy,项目名称:stylize,代码行数:46,代码来源:StylizeEngine.cs

示例2: OnExtractionSuccess

        public override void OnExtractionSuccess(string filePath, IReadOnlyList<Directory> directories, string relativePath, TextWriter log)
        {
            base.OnExtractionSuccess(filePath, directories, relativePath, log);

            try
            {
                using (var writer = OpenWriter(filePath))
                {
                    try
                    {
                        // Write any errors
                        if (directories.Any(d => d.HasError))
                        {
                            foreach (var directory in directories)
                            {
                                if (!directory.HasError)
                                    continue;
                                foreach (var error in directory.Errors)
                                    writer.Write("[ERROR: {0}] {1}\n", directory.Name, error);
                            }
                            writer.Write('\n');
                        }

                        // Write tag values for each directory
                        foreach (var directory in directories)
                        {
                            var directoryName = directory.Name;
                            foreach (var tag in directory.Tags)
                            {
                                var tagName = tag.Name;
                                var description = tag.Description;

                                if (directory is FileMetadataDirectory && tag.Type == FileMetadataDirectory.TagFileModifiedDate)
                                    description = "<omitted for regression testing as checkout dependent>";

                                writer.Write("[{0} - 0x{1:x4}] {2} = {3}\n",
                                    directoryName, tag.Type, tagName, description);
                            }

                            if (directory.TagCount != 0)
                                writer.Write('\n');

                            var xmpDirectory = directory as XmpDirectory;
                            if (xmpDirectory?.XmpMeta != null)
                            {
                                var wrote = false;
                                foreach (var prop in xmpDirectory.XmpMeta.Properties)
                                {
                                    writer.WriteLine($"[XMPMeta - {prop.Namespace}] {prop.Path} = {prop.Value}");
                                    wrote = true;
                                }
                                if (wrote)
                                    writer.Write('\n');
                            }
                        }

                        // Write file structure
                        var tree = directories.ToLookup(d => d.Parent);
                        const int indent = 4;
                        Action<Directory, int> writeLevel = null;
                        writeLevel = (parent, level) =>
                        {
                            foreach (var child in tree[parent])
                            {
                                writer.Write(new string(' ', level*indent));
                                writer.Write($"- {child.Name}\n");
                                writeLevel(child, level + 1);
                            }
                        };
                        writeLevel(null, 0);

                        writer.Write('\n');
                    }
                    finally
                    {
                        writer.Write("Generated using metadata-extractor\n");
                        writer.Write("https://drewnoakes.com/code/exif/\n");
                    }
                }
            }
            catch (Exception e)
            {
                log.Write("Exception after extraction: {0}\n", e.Message);
            }
        }
开发者ID:yjqGitHub,项目名称:metadata-extractor-dotnet,代码行数:85,代码来源:TextFileOutputHandler.cs


注:本文中的IReadOnlyList.ToLookup方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。