Redpoint.StringEnum 2024.1122.352

The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org. Prefix Reserved
dotnet add package Redpoint.StringEnum --version 2024.1122.352
NuGet\Install-Package Redpoint.StringEnum -Version 2024.1122.352
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Redpoint.StringEnum" Version="2024.1122.352" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Redpoint.StringEnum --version 2024.1122.352
#r "nuget: Redpoint.StringEnum, 2024.1122.352"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Redpoint.StringEnum as a Cake Addin
#addin nuget:?package=Redpoint.StringEnum&version=2024.1122.352

// Install Redpoint.StringEnum as a Cake Tool
#tool nuget:?package=Redpoint.StringEnum&version=2024.1122.352

Redpoint.StringEnum

This library provides an API for defining and using string-backed enumeration types. These are useful when used with databases, where storing string values for enumerations improves forward and backward compatibility (unlike storing numeric values).

Defining a string-backed enumeration type

You can create a string-backed enumeration, by defining a class like so:

class Example : StringEnum<Example>
{
    public static readonly StringEnumValue<Example> FirstValue = Create("first-value");

    public static readonly StringEnumValue<Example> SecondValue = Create("second-value");

    public static readonly StringEnumValue<Example> ThirdValue = Create("third-value");

    // ...
}

The string values that represent the enumeration are case-and-byte sensitive (ordinal comparison). You can not create enumeration values from a null string; ArgumentNullException will be thrown if you pass a null value to Create.

Defining additional enumeration values at runtime

There is currently no API for defining additional enumeration values at runtime; the possible enumeration values are lazy-loaded once by looking at the static fields and static properties of the class that inherits from StringEnum<T> (via the T type parameter). Both public and non-public fields/properties are included.

This library is both trim and AOT-compatible, as it uses [DynamicallyAccessedMembers] to ensure the fields and properties of the enumeration type are available at runtime for reflection.

Static usage of values

In most code, you'll simply use the static readonly fields you've defined, such as Example.FirstValue. All instances of the value - even those from parsing - are guaranteed to be reference and value equal.

Parsing known values from strings

To parse a value that is known to be valid from a string, you can use Example.Parse or StringEnumValue<Example>.Parse:

var value = Example.Parse("first-value");
var value2 = StringEnumValue<Example>.Parse("second-value");

If the value is not valid when calling Parse, StringEnumParseException will be thrown. You should use TryParse (see below) if the value is potentially invalid.

If you pass a null value to Parse, ArgumentNullException will be thrown.

Parsing potentially invalid string values

If you're unsure whether a string is a valid enumeration value, you can use Example.TryParse or StringEnumValue<Example>.TryParse:

var isValid = Example.TryParse("...", out var value);
var isValid2 = StringEnumValue<Example>.TryParse("...", out var value2);

If you pass a null value to TryParse, ArgumentNullException will be thrown.

Parsing strings to runtime-based enumeration types

If you don't know the type of the string enumeration you want to parse into at compile time, you can use DynamicStringEnumValue.TryParse to parse any string value into an instance of StringEnumValue<T> by passing the StringEnumValue<T> type as the first parameter, like so:

var type = typeof(StringEnumValue<Example>);
var isValid = DynamicStringEnumValue.TryParse(type, "...", out var value);

You can use DynamicStringEnumValue.IsStringEnumValueType to check if type is a constructed generic type of StringEnumValue<T>. The APIs provided by DynamicStringEnumValue are primarily intended to be used with database serialization and deserialization, where the concrete types of values are not known at the point of deserialization.

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net8.0

    • No dependencies.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Redpoint.StringEnum:

Package Downloads
Redpoint.CloudFramework The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org.

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2024.1122.352 29 5/1/2024
2024.1122.233 30 5/1/2024
2024.1115.1101 52 4/24/2024
2024.1115.1048 51 4/24/2024
2024.1115.932 54 4/24/2024
2024.1115.858 68 4/24/2024
2024.1115.665 75 4/24/2024
2024.1115.648 65 4/24/2024
2024.1115.591 72 4/24/2024
2024.1101.390 75 4/10/2024
2024.1100.741 77 4/9/2024
2024.1099.526 81 4/8/2024
2024.1099.466 76 4/8/2024
2024.1098.573 81 4/7/2024
2024.1095.977 80 4/4/2024
2024.1095.847 76 4/4/2024
2024.1095.604 78 4/4/2024
2024.1095.485 84 4/4/2024
2024.1094.930 78 4/3/2024
2024.1094.910 87 4/3/2024
2024.1094.387 91 4/3/2024
2024.1094.313 76 4/3/2024
2024.1093.520 79 4/2/2024
2024.1092.240 74 4/1/2024
2024.1089.1425 91 3/29/2024
2024.1089.983 77 3/29/2024
2024.1089.942 64 3/29/2024
2024.1089.2 84 3/29/2024
2024.1088.1343 78 3/28/2024
2024.1088.1139 79 3/28/2024
2024.1088.875 66 3/28/2024
2024.1088.700 71 3/28/2024
2024.1088.603 82 3/28/2024
2024.1088.590 87 3/28/2024
2024.1088.575 77 3/28/2024
2024.1088.561 80 3/28/2024
2024.1088.506 85 3/28/2024
2024.1088.18 84 3/28/2024
2024.1087.1181 91 3/27/2024
2024.1087.1173 84 3/27/2024
2024.1087.1143 91 3/27/2024
2024.1087.1108 85 3/27/2024
2024.1087.950 81 3/27/2024
2024.1087.939 77 3/27/2024
2024.1087.252 84 3/27/2024
2024.1070.736 82 3/10/2024
2024.1049.1437 90 2/19/2024
2024.1036.571 89 2/5/2024
2024.1036.508 73 2/5/2024
2024.1032.1204 76 2/1/2024
2024.1032.1133 76 2/1/2024
2024.1032.1122 75 2/1/2024
2024.1032.1071 74 2/1/2024
2024.1032.940 70 2/1/2024
2024.1031.912 76 1/31/2024
2024.1031.893 73 1/31/2024
2024.1031.851 62 1/31/2024
2024.1031.829 73 1/31/2024
2024.1031.386 73 1/31/2024
2024.1031.318 65 1/31/2024
2024.1017.460 93 1/17/2024
2024.1017.420 73 1/17/2024
2024.1017.163 80 1/17/2024
2024.1016.414 226 1/16/2024
2024.1012.167 84 1/12/2024
2024.1011.406 85 1/11/2024
2024.1010.315 98 1/10/2024
2023.1358.326 130 12/24/2023
2023.1351.473 93 12/17/2023
2023.1351.445 87 12/17/2023
2023.1351.432 96 12/17/2023
2023.1350.478 95 12/16/2023
2023.1344.600 109 12/10/2023
2023.1344.529 111 12/10/2023
2023.1339.582 109 12/5/2023
2023.1338.1072 115 12/4/2023
2023.1336.844 106 12/2/2023
2023.1335.378 103 12/1/2023
2023.1335.236 102 12/1/2023
2023.1335.203 93 12/1/2023