Пример #1
0
        internal string FormatInternal(TInt value, ref bool isInitialized, ref EnumMemberInternal <TInt, TIntProvider> member, EnumFormat format)
        {
            if (format == EnumFormat.DecimalValue)
            {
                return(value.ToString());
            }
            if (format == EnumFormat.HexadecimalValue)
            {
                return(value.ToString(Provider.HexFormatString, null));
            }
            if (!isInitialized)
            {
                member        = GetEnumMember(value);
                isInitialized = true;
            }
            switch (format)
            {
            case EnumFormat.Name:
                return(member?.Name);

            case EnumFormat.Description:
                return(member?.GetAttribute <DescriptionAttribute>()?.Description);

#if ENUM_MEMBER_ATTRIBUTE
            case EnumFormat.EnumMemberValue:
                return(member?.GetAttribute <EnumMemberAttribute>()?.Value);
#endif
            default:
                format.Validate(nameof(format));
                return(member != null?Enums.CustomEnumMemberFormat(member.EnumMember, format) : null);
            }
        }
Пример #2
0
        private EnumMemberParser GetEnumMemberParser(EnumFormat format)
        {
            var index   = format - EnumFormat.Name;
            var parsers = _enumMemberParsers;
            EnumMemberParser parser;

            if (index < 0 || parsers == null || index >= parsers.Length || (parser = parsers[index]) == null)
            {
                format.Validate(nameof(format));

                parser = new EnumMemberParser(format, this);
                EnumMemberParser[] oldParsers;
                do
                {
                    oldParsers = parsers;
                    parsers    = new EnumMemberParser[Math.Max(oldParsers?.Length ?? 0, index + 1)];
                    oldParsers?.CopyTo(parsers, 0);
                    parsers[index] = parser;
                } while ((parsers = Interlocked.CompareExchange(ref _enumMemberParsers, parsers, oldParsers)) != oldParsers);
            }
            return(parser);
        }
Пример #3
0
        public EnumJsonConverter(EnumFormat enumFormat)
        {
            enumFormat.Validate(nameof(enumFormat));

            EnumFormat = enumFormat;
        }