/EnumUtilities

Generic C# Enum Utilities

Primary LanguageC#The UnlicenseUnlicense

Enum Utilities

Generic Enum Utility for .NET

  • This library provides generic type safe enum operations - something that the Enum class itself lacks.
  • Written because the .NET HasFlag function for an enum is very slow and does type checking AT RUNTIME.

Functionality

            // Type Safe and Fast HasFlag
            bool hasFlag = EnumUtil.HasFlag(YourEnum.Foo | YourEnum.Bar, YourEnum.Foo);
            // Type Safe Bitwise Operators
            YourEnum bitEnd = EnumUtil.BitwiseAnd(YourEnum.Foo, YourEnum.Bar);
            YourEnum bitXor = EnumUtil.BitwiseExclusiveOr(YourEnum.Foo, YourEnum.Bar);
            YourEnum bitOr = EnumUtil.BitwiseOr(YourEnum.Foo, YourEnum.Bar);
            // Attributes on Enums
            var attributeOnEnum = EnumUtil.GetAttribute<DescriptionAttribute, YourEnum>();
            var attributeOnEnumValue = EnumUtil.GetAttribute<DescriptionAttribute, YourEnum>(YourEnum.Foo);
            var attributesOnEnum = EnumUtil.GetAttributes<DescriptionAttribute, YourEnum>();
            var attributesOnEnumValue = EnumUtil.GetAttributes<DescriptionAttribute, YourEnum>(YourEnum.Foo);
            bool isFlags = EnumUtil.HasAttribute<FlagsAttribute, YourEnum>();
            bool isFlagsShortCut = EnumUtil.HasFlagsAttribute<YourEnum>();
            // Values and Names
            string name = EnumUtil.GetName(YourEnum.Foo);
            string[] names = EnumUtil.GetNames<YourEnum>();
            YourEnum[] values = EnumUtil.GetValues<YourEnum>();
            YourEnum fooEnum = EnumUtil.Parse<YourEnum>("Foo");
            bool parsedOk = Enum.TryParse("Foo", out fooEnum);
            bool parsedOkIgnoreCase = Enum.TryParse("foo", true, out fooEnum);
            // Other
            Type underLyingType = EnumUtil.GetUnderlyingType<YourEnum>();

Usage with Generics

You may find the above EnumUtil class to be impossible to use in your own generic code. If that is the case, please use the EnumUtilBase class instead,

            EnumUtilBase<YourEnum>.GetValues<YourEnum>();

Do note that EnumUtilBase is not type safe itself and will throw a runtime exception if a non-enum type is passed in as a generic argument.