示例#1
0
        public static string FormatEnumValue(TypeDefinitionData enumType, object value)
        {
            var unqualifiedName = enumType.GetDisplayName(fullyQualify: false);

            foreach (ConstantData constant in enumType.GetMembers())
            {
                if (Object.Equals(constant.Value, value))
                {
                    return(unqualifiedName + "." + constant.Name);
                }
            }

            if (enumType.IsFlagsEnum)
            {
                var sb        = new StringBuilder();
                var longValue = Convert.ToUInt64(value);
                foreach (ConstantData constant in enumType.GetMembers())
                {
                    var longFlag = Convert.ToUInt64(constant.Value);
                    if ((longValue & longFlag) == longFlag)
                    {
                        longValue &= ~longFlag;

                        if (sb.Length != 0)
                        {
                            sb.Append(" | ");
                        }

                        sb.AppendFormat("{0}.{1}", unqualifiedName, constant.Name);

                        if (longValue == 0)
                        {
                            return(sb.ToString());
                        }
                    }
                }
            }

            var rawValue = (ulong)value;

            return(string.Format("({0}){1}", unqualifiedName, rawValue));
        }