예제 #1
0
        public static EnumMapping Create(Type enumType)
        {
            if (enumType == null) throw Error.ArgumentNull("enumType");
            if (!enumType.IsEnum()) throw Error.Argument("enumType", "Type {0} is not an enumerated type", enumType.Name);

            var result = new EnumMapping();

            result.Name = getEnumName(enumType);
            result.EnumType = enumType;
            result._enumToLiteral = new Dictionary<Enum, string>();
            result._literalToEnum = new Dictionary<string, Enum>();

            foreach(var enumValue in ReflectionHelper.FindEnumFields(enumType))
            {
                var attr = ReflectionHelper.GetAttribute<EnumLiteralAttribute>(enumValue);

                string literal = enumValue.Name;
                if (attr != null) literal = attr.Literal;

                Enum value = (Enum)enumValue.GetValue(null);

                result._enumToLiteral.Add(value, literal);
                result._literalToEnum.Add(literal, value);
            }

            return result;
        }