StrEnum 2.0.2
Prefix Reserveddotnet add package StrEnum --version 2.0.2
NuGet\Install-Package StrEnum -Version 2.0.2
<PackageReference Include="StrEnum" Version="2.0.2" />
paket add StrEnum --version 2.0.2
#r "nuget: StrEnum, 2.0.2"
// Install StrEnum as a Cake Addin #addin nuget:?package=StrEnum&version=2.0.2 // Install StrEnum as a Cake Tool #tool nuget:?package=StrEnum&version=2.0.2
StrEnum
StrEnum is a tiny library that allows to create string-based enums in C#.
Give your data more meaning by using strings over numerics while retaining type safety. Read more on when and why use string enums in my blog post.
StrEnum supports the following tools:
- StrEnum.AspNetCore allows to use string enums in your ASP.NET Core controllers.
- StrEnum.EntityFrameworkCore allows to use string enums within EF Core queries and migrations.
- StrEnum.Dapper allows to use string enums in Dapper commands and queries.
- StrEnum.System.Text.Json enables JSON serialization and deserialization with System.Text.Json.
StrEnum targets .NET Standard 2.0 and has no external dependencies.
Installation
You can install StrEnum using the .NET CLI:
dotnet add package StrEnum
Usage
Create a class that inherits from the StringEnum<TEnum>
class and use the Define
method to define the members:
public class Sport : StringEnum<Sport>
{
public static readonly Sport TrailRunning = Define("TRAIL_RUNNING");
public static readonly Sport RoadCycling = Define("ROAD_CYCLING");
}
You can now use your string enum as you would a regular enum:
var sport = Sport.TrailRunning;
sport.ToString(); // TrailRunning
(string)sport; // TRAIL_RUNNING
sport == Sport.RoadCycling; // false
Parsing
Use the Parse
method to convert the name or a string value to the corresponding string enum member:
Sport.Parse("TrailRunning"); // Sport.TrailRunning
Sport.Parse("TRAIL_RUNNING"); // Sport.TrailRunning
Sport.Parse("Quidditch"); // throws an ArgumentException: "Requested name or value 'Quidditch' was not found."
To make Parse
ignore case, pass true
as the second argument:
Sport.Parse("trailrunning", ignoreCase: true); // Sport.TrailRunning
Sport.Parse("trail_running", ignoreCase: true); // Sport.TrailRunning
To make Parse
only match the members by value and not by name, pass MatchBy.ValueOnly
as the third argument:
Sport.Parse("TRAIL_RUNNING", matchBy: MatchBy.ValueOnly); // Sport.TrailRunning
Sport.Parse("TrailRunning", matchBy: MatchBy.ValueOnly); // throws an ArgumentException: "Requested value 'TrailRunning' was not found."
Use the TryParse
method when you want to check whether the provided string can be converted to a string enum:
Sport.TryParse("TrailRunning", out var trailRunning); // true
(string)trailRunning; // Sport.TrailRunning
Sport.TryParse("Quidditch", out var quidditch); // false
quidditch == null; // true
Listing members
Use the GetMembers
method to list the members of a string enum in the order of definition:
Sport.GetMembers(); // [Sport.TrailRunning, Sport.RoadCycling]
Using switch
statements
You can use StrEnum enums with switch
statements with the help of C# 8 property patterns and when
case guards:
switch (sport)
{
case { } when sport == Sport.TrailRunning:
PutOnTrailShoes();
break;
case { } when sport == Sport.RoadCycling:
GetOnRoadBike();
break;
}
You can also use switch
expressions like this:
var sportName = sport switch
{
_ when sport == Sport.TrailRunning => "Trail Running",
_ when sport == Sport.RoadCycling => "Road Cycling",
_ => "Not yet known"
};
Adding members after initialization
The Define
method can be used to add members to a string enum after it has been initialized. Since Define
is protected, you need to expose it to the client code first:
public class FictionalSport : StringEnum<FictionalSport>
{
public static readonly FictionalSport Quidditch = Define("QUIDDITCH");
public static FictionalSport Add(string name, string value)
{
return Define(value, name);
}
}
You need to provide both name and value for the members defined in such way:
var podracing = FictionalSport.Add("Podracing", "PODRACING");
(string)podracing; // PODRACING
FictionalSport.Parse("Podracing").ToString(); // Podracing
License
Copyright © 2022 Dmitry Khmara.
StrEnum is licensed under the MIT license.
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 | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | 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 | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages (5)
Showing the top 5 NuGet packages that depend on StrEnum:
Package | Downloads |
---|---|
StrEnum.System.Text.Json
String enum support for System.Text.Json. |
|
StrEnum.EntityFrameworkCore
String enum support for EF Core |
|
StrEnum.AspNetCore
String enum support for ASP.NET Core. |
|
ClickTime.NET
Wrapper for API @ https://developer.clicktime.com/docs/api/ |
|
StrEnum.Dapper
String enum support for Dapper. |
GitHub repositories
This package is not used by any popular GitHub repositories.