Redpoint.StringEnum
2024.1032.940
Prefix Reserved
See the version list below for details.
dotnet add package Redpoint.StringEnum --version 2024.1032.940
NuGet\Install-Package Redpoint.StringEnum -Version 2024.1032.940
<PackageReference Include="Redpoint.StringEnum" Version="2024.1032.940" />
paket add Redpoint.StringEnum --version 2024.1032.940
#r "nuget: Redpoint.StringEnum, 2024.1032.940"
// Install Redpoint.StringEnum as a Cake Addin #addin nuget:?package=Redpoint.StringEnum&version=2024.1032.940 // Install Redpoint.StringEnum as a Cake Tool #tool nuget:?package=Redpoint.StringEnum&version=2024.1032.940
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 | Versions 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. |
-
net8.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Redpoint.StringEnum:
Package | Downloads |
---|---|
Redpoint.CloudFramework
A framework for building ASP.NET Core applications on top of Google Cloud Firestore in Datastore mode. Not only does this framework provide a model-based API for interacting with Google Cloud Firestore, it contains useful implementations of things like database migrations, distributed locks, geographic indexes and sharded counters. |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
2024.1320.653 | 27 | 11/15/2024 |
2024.1320.619 | 21 | 11/15/2024 |
2024.1320.601 | 28 | 11/15/2024 |
2024.1320.159 | 26 | 11/15/2024 |
2024.1320.98 | 28 | 11/15/2024 |
2024.1320.2 | 26 | 11/15/2024 |
2024.1319.1431 | 33 | 11/15/2024 |
2024.1319.1335 | 31 | 11/14/2024 |
2024.1317.631 | 62 | 11/12/2024 |
2024.1316.330 | 70 | 11/11/2024 |
2024.1311.540 | 59 | 11/6/2024 |
2024.1306.225 | 65 | 11/1/2024 |
2024.1306.199 | 70 | 11/1/2024 |
2024.1306.171 | 57 | 11/1/2024 |
2024.1306.117 | 69 | 11/1/2024 |
2024.1305.506 | 62 | 10/31/2024 |
2024.1305.502 | 62 | 10/31/2024 |
2024.1305.465 | 63 | 10/31/2024 |
2024.1305.442 | 63 | 10/31/2024 |
2024.1305.399 | 62 | 10/31/2024 |
2024.1299.1070 | 72 | 10/25/2024 |
2024.1289.621 | 74 | 10/15/2024 |
2024.1289.338 | 71 | 10/15/2024 |
2024.1277.836 | 75 | 10/5/2024 |
2024.1277.711 | 76 | 10/3/2024 |
2024.1277.695 | 72 | 10/3/2024 |
2024.1270.409 | 86 | 9/26/2024 |
2024.1269.621 | 87 | 9/25/2024 |
2024.1269.619 | 78 | 9/25/2024 |
2024.1269.605 | 86 | 9/25/2024 |
2024.1242.282 | 94 | 8/29/2024 |
2024.1242.261 | 92 | 8/29/2024 |
2024.1242.233 | 96 | 8/29/2024 |
2024.1238.829 | 107 | 8/25/2024 |
2024.1238.327 | 113 | 8/25/2024 |
2024.1225.297 | 101 | 8/12/2024 |
2024.1205.140 | 98 | 7/23/2024 |
2024.1204.110 | 94 | 7/22/2024 |
2024.1204.62 | 90 | 7/22/2024 |
2024.1190.491 | 101 | 7/8/2024 |
2024.1177.305 | 97 | 6/25/2024 |
2024.1168.700 | 105 | 6/16/2024 |
2024.1168.649 | 102 | 6/16/2024 |
2024.1168.535 | 108 | 6/16/2024 |
2024.1167.643 | 100 | 6/15/2024 |
2024.1166.989 | 96 | 6/14/2024 |
2024.1166.818 | 98 | 6/14/2024 |
2024.1166.535 | 100 | 6/14/2024 |
2024.1166.422 | 92 | 6/14/2024 |
2024.1166.362 | 93 | 6/14/2024 |
2024.1166.360 | 98 | 6/14/2024 |
2024.1165.1212 | 93 | 6/13/2024 |
2024.1165.1160 | 95 | 6/13/2024 |
2024.1165.1019 | 98 | 6/13/2024 |
2024.1165.978 | 91 | 6/13/2024 |
2024.1165.920 | 92 | 6/13/2024 |
2024.1165.908 | 96 | 6/13/2024 |
2024.1165.873 | 95 | 6/13/2024 |
2024.1165.830 | 95 | 6/13/2024 |
2024.1165.806 | 97 | 6/13/2024 |
2024.1165.794 | 96 | 6/13/2024 |
2024.1165.792 | 96 | 6/13/2024 |
2024.1165.761 | 94 | 6/13/2024 |
2024.1165.743 | 91 | 6/13/2024 |
2024.1165.735 | 96 | 6/13/2024 |
2024.1165.713 | 96 | 6/13/2024 |
2024.1165.640 | 90 | 6/13/2024 |
2024.1165.574 | 95 | 6/13/2024 |
2024.1165.466 | 94 | 6/13/2024 |
2024.1165.417 | 95 | 6/13/2024 |
2024.1165.392 | 91 | 6/13/2024 |
2024.1164.341 | 84 | 6/12/2024 |
2024.1155.941 | 108 | 6/3/2024 |
2024.1140.783 | 110 | 5/19/2024 |
2024.1140.692 | 96 | 5/19/2024 |
2024.1140.673 | 101 | 5/19/2024 |
2024.1129.506 | 97 | 5/8/2024 |
2024.1128.831 | 115 | 5/7/2024 |
2024.1124.465 | 81 | 5/3/2024 |
2024.1123.1162 | 70 | 5/2/2024 |
2024.1123.1117 | 70 | 5/2/2024 |
2024.1123.1050 | 65 | 5/2/2024 |
2024.1122.352 | 99 | 5/1/2024 |
2024.1122.233 | 96 | 5/1/2024 |
2024.1115.1101 | 107 | 4/24/2024 |
2024.1115.1048 | 91 | 4/24/2024 |
2024.1115.932 | 93 | 4/24/2024 |
2024.1115.858 | 100 | 4/24/2024 |
2024.1115.665 | 101 | 4/24/2024 |
2024.1115.648 | 93 | 4/24/2024 |
2024.1115.591 | 100 | 4/24/2024 |
2024.1101.390 | 101 | 4/10/2024 |
2024.1100.741 | 105 | 4/9/2024 |
2024.1099.526 | 111 | 4/8/2024 |
2024.1099.466 | 102 | 4/8/2024 |
2024.1098.573 | 108 | 4/7/2024 |
2024.1095.977 | 110 | 4/4/2024 |
2024.1095.847 | 105 | 4/4/2024 |
2024.1095.604 | 104 | 4/4/2024 |
2024.1095.485 | 121 | 4/4/2024 |
2024.1094.930 | 105 | 4/3/2024 |
2024.1094.910 | 115 | 4/3/2024 |
2024.1094.387 | 117 | 4/3/2024 |
2024.1094.313 | 101 | 4/3/2024 |
2024.1093.520 | 105 | 4/2/2024 |
2024.1092.240 | 105 | 4/1/2024 |
2024.1089.1425 | 118 | 3/29/2024 |
2024.1089.983 | 108 | 3/29/2024 |
2024.1089.942 | 91 | 3/29/2024 |
2024.1089.2 | 113 | 3/29/2024 |
2024.1088.1343 | 106 | 3/28/2024 |
2024.1088.1139 | 109 | 3/28/2024 |
2024.1088.875 | 81 | 3/28/2024 |
2024.1088.700 | 97 | 3/28/2024 |
2024.1088.603 | 111 | 3/28/2024 |
2024.1088.590 | 114 | 3/28/2024 |
2024.1088.575 | 109 | 3/28/2024 |
2024.1088.561 | 108 | 3/28/2024 |
2024.1088.506 | 112 | 3/28/2024 |
2024.1088.18 | 112 | 3/28/2024 |
2024.1087.1181 | 121 | 3/27/2024 |
2024.1087.1173 | 112 | 3/27/2024 |
2024.1087.1143 | 119 | 3/27/2024 |
2024.1087.1108 | 99 | 3/27/2024 |
2024.1087.950 | 109 | 3/27/2024 |
2024.1087.939 | 94 | 3/27/2024 |
2024.1087.252 | 114 | 3/27/2024 |
2024.1070.736 | 113 | 3/10/2024 |
2024.1049.1437 | 116 | 2/19/2024 |
2024.1036.571 | 121 | 2/5/2024 |
2024.1036.508 | 102 | 2/5/2024 |
2024.1032.1204 | 105 | 2/1/2024 |
2024.1032.1133 | 104 | 2/1/2024 |
2024.1032.1122 | 126 | 2/1/2024 |
2024.1032.1071 | 103 | 2/1/2024 |
2024.1032.940 | 97 | 2/1/2024 |
2024.1031.912 | 101 | 1/31/2024 |
2024.1031.893 | 102 | 1/31/2024 |
2024.1031.851 | 89 | 1/31/2024 |
2024.1031.829 | 98 | 1/31/2024 |
2024.1031.386 | 95 | 1/31/2024 |
2024.1031.318 | 117 | 1/31/2024 |
2024.1017.460 | 121 | 1/17/2024 |
2024.1017.420 | 101 | 1/17/2024 |
2024.1017.163 | 106 | 1/17/2024 |
2024.1016.414 | 539 | 1/16/2024 |
2024.1012.167 | 114 | 1/12/2024 |
2024.1011.406 | 111 | 1/11/2024 |
2024.1010.315 | 130 | 1/10/2024 |
2023.1358.326 | 161 | 12/24/2023 |
2023.1351.473 | 121 | 12/17/2023 |
2023.1351.445 | 120 | 12/17/2023 |
2023.1351.432 | 125 | 12/17/2023 |
2023.1350.478 | 124 | 12/16/2023 |
2023.1344.600 | 138 | 12/10/2023 |
2023.1344.529 | 143 | 12/10/2023 |
2023.1339.582 | 136 | 12/5/2023 |
2023.1338.1072 | 145 | 12/4/2023 |
2023.1336.844 | 136 | 12/2/2023 |
2023.1335.378 | 135 | 12/1/2023 |
2023.1335.236 | 130 | 12/1/2023 |
2023.1335.203 | 116 | 12/1/2023 |