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); } }
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); }
public EnumJsonConverter(EnumFormat enumFormat) { enumFormat.Validate(nameof(enumFormat)); EnumFormat = enumFormat; }