private void Map()
        {
            var builder = ExtensionName.Build().ToArray();

            foreach (var extensionName in builder)
            {
                this.mapedName.Add(extensionName.Name, extensionName);

                foreach (var t in extensionName.Types)
                {
                    Dictionary <string, ExtensionName> map;
                    if (!this.mapedType.TryGetValue((int)t, out map))
                    {
                        map = new Dictionary <string, ExtensionName>();
                        this.mapedType.Add((int)t, map);
                    }

                    try
                    {
                        map.Add(extensionName.Name, extensionName);
                    }
                    catch (ArgumentException)
                    {
                        throw new Exception($"{nameof(ExtensionNames)}.{extensionName.EnumName} contain same FileTypeAttribute: {nameof(ExtensionNames)}.{t}");
                    }
                }
            }
        }
        public static IEnumerable <ExtensionName> Build()
        {
            var values = (ExtensionNames[])Enum.GetValues(typeof(ExtensionNames));

            if (values.Length == 0)
            {
                yield break;
            }
            foreach (var f in typeof(ExtensionNames).GetRuntimeFields())
            {
                if (f.Name == "value__")
                {
                    continue;                      // 枚举保留名称
                }
                var types = f.GetCustomAttributes <FileTypeAttribute>().ToArray();
                if (types.Length == 0)
                {
                    throw new Exception($"missing FileTypeAttribute on {nameof(ExtensionNames)}.{f.Name}");
                }

                var ext = new ExtensionName(f.Name, f.GetCustomAttribute <OriginNameAttribute>()?.OriginName)
                {
                    Types = types.Select(z => z.Type).ToArray()
                };

                yield return(ext);
            }
        }
        public static IEnumerable<ExtensionName> Build()
        {
            var values = (ExtensionNames[])Enum.GetValues(typeof(ExtensionNames));
            if (values.Length == 0) yield break;
            foreach (var f in typeof(ExtensionNames).GetRuntimeFields())
            {
                if (f.Name == "value__") continue; // 枚举保留名称

                var types = f.GetCustomAttributes<FileTypeAttribute>().ToArray();
                if (types.Length == 0) throw new Exception($"missing FileTypeAttribute on {nameof(ExtensionNames)}.{f.Name}");

                var ext = new ExtensionName(f.Name, f.GetCustomAttribute<OriginNameAttribute>()?.OriginName)
                {
                    Types = types.Select(z => z.Type).ToArray()
                };

                yield return ext;
            }
        }