Skip to content

binki/EnumUtilities

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

Generic C# Enum Utilities

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 100.0%