Enums.NET v3.0.0 Release Notes

Release Date: 2019-11-02 // over 4 years ago
  • ๐Ÿ†• New Features

    • โž• Added C# 8 nullable reference annotations throughout.
    • โฌ‡๏ธ Reduced default memory usage by over 83% by minimizing generic code over the enum type, due to value type generic argument code explosion.
    • ๐Ÿ‘Œ Improved performance throughout.
    • โž• Added ReadOnlySpan<char> parsing support when targeting .NET Core 3.0+.

    ๐Ÿ’ฅ Breaking Changes

    • GetNames, GetValues, GetMembers, GetFlags, and GetFlagMembers now all return an IReadOnlyList<T> instead of IEnumerable<T>.
    • ๐Ÿšš Since IReadOnlyList<T> was added in .NET Framework 4.5, support for prior .NET Framework versions has been removed.
    • ๐Ÿ— .NET Standard builds now depend on the System.Runtime.CompilerServices.Unsafe package for efficient conversions between the enum and its underlying type instead of relying on Fody to implement that.
    • ๐Ÿ“ฆ NonGenericEnums, NonGenericFlagEnums, UnsafeEnums, and UnsafeFlagEnums are now deprecated and will be removed in v4.0. The equivalent methods have been added to the Enums and FlagEnums classes with the unsafe versions having the suffix of Unsafe to avoid a naming conflict with the type-safe versions. This was done to better match System.Enum and provide better discoverability being more centralized. I've created the C# roslyn analyzer Enums.NET.Analyzer which provides a code fix to migrate your usages of the non-generic and unsafe methods to the new methods.
    • ๐Ÿ‘ Nullable enum types are not supported in the new non-generic methods but are still supported when using NonGenericEnums and NonGenericFlagEnums.
    • ๐Ÿšš Deprecated many convenience method overloads as there were getting to be too many and will be removed in v4.0.
    • ๐Ÿšš NonGenericEnumComparer and UnsafeEnumComparer were removed, use EnumComparer.GetInstance and EnumComparer<TEnum>.Instance instead. EnumComparer<TEnum>'s TEnum type argument is no longer constrained to struct, Enum to support this.
    • ๐Ÿšš A few TryToObject overloads were removed due to there being too many convenience method overloads.