Enums.NET
4.0.0
See the version list below for details.
dotnet add package Enums.NET --version 4.0.0
NuGet\Install-Package Enums.NET -Version 4.0.0
<PackageReference Include="Enums.NET" Version="4.0.0" />
paket add Enums.NET --version 4.0.0
#r "nuget: Enums.NET, 4.0.0"
// Install Enums.NET as a Cake Addin #addin nuget:?package=Enums.NET&version=4.0.0 // Install Enums.NET as a Cake Tool #tool nuget:?package=Enums.NET&version=4.0.0
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 Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp1.0 was computed. netcoreapp1.1 was computed. netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 is compatible. netcoreapp3.1 was computed. |
.NET Standard | netstandard1.0 is compatible. netstandard1.1 is compatible. netstandard1.2 was computed. netstandard1.3 is compatible. netstandard1.4 was computed. netstandard1.5 was computed. netstandard1.6 was computed. netstandard2.0 is compatible. netstandard2.1 is compatible. |
.NET Framework | net45 is compatible. net451 was computed. net452 was computed. net46 was computed. net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen30 was computed. tizen40 was computed. tizen60 was computed. |
Universal Windows Platform | uap was computed. uap10.0 was computed. |
Windows Phone | wp8 was computed. wp81 was computed. wpa81 was computed. |
Windows Store | netcore was computed. netcore45 was computed. netcore451 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.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 (99)
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.Extensions.XAF
Xpand.Extensions.XAF |
|
Xpand.XAF.Modules.Reactive
The `Reactive` module provides a XAF DSL API for functional/stateless implementations. |
|
Xpand.Extensions.Reactive
Xpand.Extensions.Reactive |
|
Xpand.XAF.Modules.ModelMapper
The `ModelMapper` allows to control all XAF components from the application model. |
GitHub repositories (14)
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 |
---|---|---|
5.0.0 | 728,171 | 5/3/2024 |
4.0.2 | 707,354 | 1/17/2024 |
4.0.1 | 8,686,868 | 11/18/2022 |
4.0.0 | 9,489,747 | 1/29/2021 |
3.0.3 | 2,836,594 | 1/23/2020 |
3.0.2 | 186,610 | 12/6/2019 |
3.0.1 | 228,170 | 11/11/2019 |
3.0.0 | 125,871 | 11/2/2019 |
2.3.2 | 6,387,339 | 6/23/2018 |
2.3.1 | 171,516 | 12/15/2017 |
2.3.0 | 35,875 | 11/21/2017 |
2.2.0 | 70,584 | 6/6/2017 |
2.1.1 | 30,625 | 3/25/2017 |
2.0.0 | 131,494 | 1/1/2017 |
1.0.0 | 9,336 | 11/5/2016 |