using System; using System.Collections.Generic; public static class DushMaterialCatalog { private static readonly DushMaterialDescriptor[] Descriptors = { new DushMaterialDescriptor(DushMaterialKind.Material78021, "dush_78021", "突破材料78021", "dushMaterial78021"), new DushMaterialDescriptor(DushMaterialKind.Material78022, "dush_78022", "突破材料78022", "dushMaterial78022"), new DushMaterialDescriptor(DushMaterialKind.Material78023, "dush_78023", "突破材料78023", "dushMaterial78023"), new DushMaterialDescriptor(DushMaterialKind.Material78024, "dush_78024", "突破材料78024", "dushMaterial78024") }; private static readonly Dictionary ByKind = BuildByKind(); private static readonly Dictionary ByKey = BuildByKey(); public static IReadOnlyList All { get { return Descriptors; } } public static string GetKey(DushMaterialKind kind) { return ByKind[kind].Key; } public static string GetDisplayName(DushMaterialKind kind) { return ByKind[kind].DisplayName; } public static bool TryGetKind(string key, out DushMaterialKind kind) { kind = default(DushMaterialKind); if (string.IsNullOrEmpty(key)) { return false; } DushMaterialDescriptor descriptor; if (!ByKey.TryGetValue(key, out descriptor)) { return false; } kind = descriptor.Kind; return true; } public static bool TryGetLegacyFieldName(DushMaterialKind kind, out string fieldName) { fieldName = null; DushMaterialDescriptor descriptor; if (!ByKind.TryGetValue(kind, out descriptor) || string.IsNullOrEmpty(descriptor.LegacyPlayerFieldName)) { return false; } fieldName = descriptor.LegacyPlayerFieldName; return true; } private static Dictionary BuildByKind() { var map = new Dictionary(); for (int i = 0; i < Descriptors.Length; i++) { map[Descriptors[i].Kind] = Descriptors[i]; } return map; } private static Dictionary BuildByKey() { var map = new Dictionary(StringComparer.Ordinal); for (int i = 0; i < Descriptors.Length; i++) { map[Descriptors[i].Key] = Descriptors[i]; } return map; } } public sealed class DushMaterialDescriptor { public DushMaterialDescriptor(DushMaterialKind kind, string key, string displayName, string legacyPlayerFieldName) { Kind = kind; Key = key; DisplayName = displayName; LegacyPlayerFieldName = legacyPlayerFieldName; } public DushMaterialKind Kind { get; private set; } public string Key { get; private set; } public string DisplayName { get; private set; } public string LegacyPlayerFieldName { get; private set; } }