Enums.NET
4.0.1
dotnet add package Enums.NET --version 4.0.1
NuGet\Install-Package Enums.NET -Version 4.0.1
<PackageReference Include="Enums.NET" Version="4.0.1" />
paket add Enums.NET --version 4.0.1
#r "nuget: Enums.NET, 4.0.1"
// Install Enums.NET as a Cake Addin
#addin nuget:?package=Enums.NET&version=4.0.1
// Install Enums.NET as a Cake Tool
#tool nuget:?package=Enums.NET&version=4.0.1
Enums.NET is a high-performance type-safe .NET enum utility library which provides many operations as convenient extension methods. It is compatible with .NET Framework 4.5+ and .NET Standard 1.0+.
Enums.NET Demo
using System;
using System.Linq;
using EnumsNET;
using NUnit.Framework;
using DescriptionAttribute = System.ComponentModel.DescriptionAttribute;
[TestFixture]
class EnumsNETDemo
{
// Enum definitions at bottom
[Test]
public void Enumerate()
{
var count = 0;
// Retrieves all enum members in increasing value order
foreach (var member in Enums.GetMembers<NumericOperator>())
{
NumericOperator value = member.Value;
string name = member.Name;
AttributeCollection attributes = member.Attributes;
++count;
}
Assert.AreEqual(8, count);
count = 0;
// Retrieves distinct values in increasing value order
foreach (var value in Enums.GetValues<NumericOperator>(EnumMemberSelection.Distinct))
{
string name = value.GetName();
AttributeCollection attributes = value.GetAttributes();
++count;
}
Assert.AreEqual(6, count);
}
[Test]
public void FlagEnumOperations()
{
// HasAllFlags
Assert.IsTrue((DaysOfWeek.Monday | DaysOfWeek.Wednesday | DaysOfWeek.Friday).HasAllFlags(DaysOfWeek.Monday | DaysOfWeek.Wednesday));
Assert.IsFalse(DaysOfWeek.Monday.HasAllFlags(DaysOfWeek.Monday | DaysOfWeek.Wednesday));
// HasAnyFlags
Assert.IsTrue(DaysOfWeek.Monday.HasAnyFlags(DaysOfWeek.Monday | DaysOfWeek.Wednesday));
Assert.IsFalse((DaysOfWeek.Monday | DaysOfWeek.Wednesday).HasAnyFlags(DaysOfWeek.Friday));
// CombineFlags ~ bitwise OR
Assert.AreEqual(DaysOfWeek.Monday | DaysOfWeek.Wednesday, DaysOfWeek.Monday.CombineFlags(DaysOfWeek.Wednesday));
Assert.AreEqual(DaysOfWeek.Monday | DaysOfWeek.Wednesday | DaysOfWeek.Friday, FlagEnums.CombineFlags(DaysOfWeek.Monday, DaysOfWeek.Wednesday, DaysOfWeek.Friday));
// CommonFlags ~ bitwise AND
Assert.AreEqual(DaysOfWeek.Monday, DaysOfWeek.Monday.CommonFlags(DaysOfWeek.Monday | DaysOfWeek.Wednesday));
Assert.AreEqual(DaysOfWeek.None, DaysOfWeek.Monday.CommonFlags(DaysOfWeek.Wednesday));
// RemoveFlags
Assert.AreEqual(DaysOfWeek.Wednesday, (DaysOfWeek.Monday | DaysOfWeek.Wednesday).RemoveFlags(DaysOfWeek.Monday));
Assert.AreEqual(DaysOfWeek.None, (DaysOfWeek.Monday | DaysOfWeek.Wednesday).RemoveFlags(DaysOfWeek.Monday | DaysOfWeek.Wednesday));
// GetFlags, splits out the individual flags in increasing significance bit order
var flags = DaysOfWeek.Weekend.GetFlags();
Assert.AreEqual(2, flags.Count);
Assert.AreEqual(DaysOfWeek.Sunday, flags[0]);
Assert.AreEqual(DaysOfWeek.Saturday, flags[1]);
}
[Test]
public new void ToString()
{
// AsString, equivalent to ToString
Assert.AreEqual("Equals", NumericOperator.Equals.AsString());
Assert.AreEqual("-1", ((NumericOperator)(-1)).AsString());
// GetName
Assert.AreEqual("Equals", NumericOperator.Equals.GetName());
Assert.IsNull(((NumericOperator)(-1)).GetName());
// Get description
Assert.AreEqual("Is", NumericOperator.Equals.AsString(EnumFormat.Description));
Assert.IsNull(NumericOperator.LessThan.AsString(EnumFormat.Description));
// Get description if applied, otherwise the name
Assert.AreEqual("LessThan", NumericOperator.LessThan.AsString(EnumFormat.Description, EnumFormat.Name));
}
[Test]
public void Validate()
{
// Standard Enums, checks is defined
Assert.IsTrue(NumericOperator.LessThan.IsValid());
Assert.IsFalse(((NumericOperator)20).IsValid());
// Flag Enums, checks is valid flag combination or is defined
Assert.IsTrue((DaysOfWeek.Sunday | DaysOfWeek.Wednesday).IsValid());
Assert.IsFalse((DaysOfWeek.Sunday | DaysOfWeek.Wednesday | ((DaysOfWeek)(-1))).IsValid());
// Custom validation through IEnumValidatorAttribute<TEnum>
Assert.IsTrue(DayType.Weekday.IsValid());
Assert.IsTrue((DayType.Weekday | DayType.Holiday).IsValid());
Assert.IsFalse((DayType.Weekday | DayType.Weekend).IsValid());
}
[Test]
public void CustomEnumFormat()
{
EnumFormat symbolFormat = Enums.RegisterCustomEnumFormat(member => member.Attributes.Get<SymbolAttribute>()?.Symbol);
Assert.AreEqual(">", NumericOperator.GreaterThan.AsString(symbolFormat));
Assert.AreEqual(NumericOperator.LessThan, Enums.Parse<NumericOperator>("<", ignoreCase: false, symbolFormat));
}
[Test]
public void Attributes()
{
Assert.AreEqual("!=", NumericOperator.NotEquals.GetAttributes().Get<SymbolAttribute>().Symbol);
Assert.IsTrue(NumericOperator.GreaterThanOrEquals.GetAttributes().Has<PrimaryEnumMemberAttribute>());
Assert.IsFalse(NumericOperator.LessThan.GetAttributes().Has<DescriptionAttribute>());
}
[Test]
public void Parsing()
{
Assert.AreEqual(NumericOperator.GreaterThan, Enums.Parse<NumericOperator>("GreaterThan"));
Assert.AreEqual(NumericOperator.NotEquals, Enums.Parse<NumericOperator>("1"));
Assert.AreEqual(NumericOperator.Equals, Enums.Parse<NumericOperator>("Is", ignoreCase: false, EnumFormat.Description));
Assert.AreEqual(DaysOfWeek.Monday | DaysOfWeek.Wednesday, Enums.Parse<DaysOfWeek>("Monday, Wednesday"));
Assert.AreEqual(DaysOfWeek.Tuesday | DaysOfWeek.Thursday, FlagEnums.ParseFlags<DaysOfWeek>("Tuesday | Thursday", ignoreCase: false, delimiter: "|"));
}
enum NumericOperator
{
[Symbol("="), Description("Is")]
Equals,
[Symbol("!="), Description("Is not")]
NotEquals,
[Symbol("<")]
LessThan,
[Symbol(">="), PrimaryEnumMember] // PrimaryEnumMember indicates enum member as primary duplicate for extension methods
GreaterThanOrEquals,
NotLessThan = GreaterThanOrEquals,
[Symbol(">")]
GreaterThan,
[Symbol("<="), PrimaryEnumMember]
LessThanOrEquals,
NotGreaterThan = LessThanOrEquals
}
[AttributeUsage(AttributeTargets.Field)]
class SymbolAttribute : Attribute
{
public string Symbol { get; }
public SymbolAttribute(string symbol)
{
Symbol = symbol;
}
}
[Flags]
enum DaysOfWeek
{
None = 0,
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Weekdays = Monday | Tuesday | Wednesday | Thursday | Friday,
Saturday = 64,
Weekend = Sunday | Saturday,
All = Sunday | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday
}
[Flags, DayTypeValidator]
enum DayType
{
Weekday = 1,
Weekend = 2,
Holiday = 4
}
[AttributeUsage(AttributeTargets.Enum)]
class DayTypeValidatorAttribute : Attribute, IEnumValidatorAttribute<DayType>
{
public bool IsValid(DayType value) => value.GetFlagCount(DayType.Weekday | DayType.Weekend) == 1 && FlagEnums.IsValidFlagCombination(value);
}
}
Product | Versions |
---|---|
.NET | net5.0 net5.0-windows net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows net7.0 net7.0-android net7.0-ios net7.0-maccatalyst net7.0-macos net7.0-tvos net7.0-windows |
.NET Core | netcoreapp1.0 netcoreapp1.1 netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1 |
.NET Standard | netstandard1.0 netstandard1.1 netstandard1.2 netstandard1.3 netstandard1.4 netstandard1.5 netstandard1.6 netstandard2.0 netstandard2.1 |
.NET Framework | net45 net451 net452 net46 net461 net462 net463 net47 net471 net472 net48 net481 |
MonoAndroid | monoandroid |
MonoMac | monomac |
MonoTouch | monotouch |
Tizen | tizen30 tizen40 tizen60 |
Universal Windows Platform | uap uap10.0 |
Windows Phone | wp8 wp81 wpa81 |
Windows Store | netcore netcore45 netcore451 |
Xamarin.iOS | xamarinios |
Xamarin.Mac | xamarinmac |
Xamarin.TVOS | xamarintvos |
Xamarin.WatchOS | xamarinwatchos |
-
.NETCoreApp 3.0
- No dependencies.
-
.NETFramework 4.5
- System.Runtime.CompilerServices.Unsafe (>= 5.0.0)
-
.NETStandard 1.0
- NETStandard.Library (>= 1.6.1)
- System.ComponentModel.Primitives (>= 4.3.0)
- System.Runtime.CompilerServices.Unsafe (>= 5.0.0)
- System.Runtime.Serialization.Primitives (>= 4.3.0)
-
.NETStandard 1.1
- NETStandard.Library (>= 1.6.1)
- System.ComponentModel.Annotations (>= 4.6.0)
- System.ComponentModel.Primitives (>= 4.3.0)
- System.Runtime.CompilerServices.Unsafe (>= 5.0.0)
- System.Runtime.Serialization.Primitives (>= 4.3.0)
-
.NETStandard 1.3
- NETStandard.Library (>= 1.6.1)
- System.ComponentModel.Annotations (>= 4.6.0)
- System.ComponentModel.Primitives (>= 4.3.0)
- System.Runtime.CompilerServices.Unsafe (>= 5.0.0)
- System.Runtime.Serialization.Primitives (>= 4.3.0)
-
.NETStandard 2.0
- System.ComponentModel.Annotations (>= 4.6.0)
- System.Runtime.CompilerServices.Unsafe (>= 5.0.0)
-
.NETStandard 2.1
- System.ComponentModel.Annotations (>= 4.6.0)
- System.Runtime.CompilerServices.Unsafe (>= 5.0.0)
NuGet packages (79)
Showing the top 5 NuGet packages that depend on Enums.NET:
Package | Downloads |
---|---|
NPOI
.NET port of Apache POI | Contact us on telegram: https://t.me/npoidevs |
|
Xpand.XAF.Modules.Reactive
The `Reactive` module provides a XAF DSL API for functional/stateless implementations. |
|
Xpand.Extensions.XAF
Xpand.Extensions.XAF |
|
OpenTok
OpenTok is an API from TokBox that enables websites to weave live group video communication into their online experience. |
|
Xpand.XAF.Modules.ModelMapper
The `ModelMapper` allows to control all XAF components from the application model. |
GitHub repositories (11)
Showing the top 5 popular GitHub repositories that depend on Enums.NET:
Repository | Stars |
---|---|
nissl-lab/npoi
a .NET library that can read/write Office formats without Microsoft Office installed. No COM+, no interop.
|
|
opserver/Opserver
Stack Exchange's Monitoring System
|
|
ardalis/SmartEnum
A base class for quickly and easily creating strongly typed enum replacements in C#.
|
|
TylerBrinkley/Enums.NET
Enums.NET is a high-performance type-safe .NET enum utility library
|
|
PoESkillTree/PoESkillTree
A Passive Skill Tree Planner for Path of Exile
|
Version | Downloads | Last updated |
---|---|---|
4.0.1 | 76,468 | 11/18/2022 |
4.0.0 | 2,525,386 | 1/29/2021 |
3.0.3 | 1,922,775 | 1/23/2020 |
3.0.2 | 153,162 | 12/6/2019 |
3.0.1 | 163,884 | 11/11/2019 |
3.0.0 | 76,955 | 11/2/2019 |
2.3.2 | 4,465,111 | 6/23/2018 |
2.3.1 | 148,821 | 12/15/2017 |
2.3.0 | 20,305 | 11/21/2017 |
2.2.0 | 55,222 | 6/6/2017 |
2.1.1 | 29,913 | 3/25/2017 |
2.0.0 | 129,103 | 1/1/2017 |
1.0.0 | 7,459 | 11/5/2016 |