StaticDictionaries 1.3.1
dotnet add package StaticDictionaries --version 1.3.1
NuGet\Install-Package StaticDictionaries -Version 1.3.1
<PackageReference Include="StaticDictionaries" Version="1.3.1" />
paket add StaticDictionaries --version 1.3.1
#r "nuget: StaticDictionaries, 1.3.1"
// Install StaticDictionaries as a Cake Addin #addin nuget:?package=StaticDictionaries&version=1.3.1 // Install StaticDictionaries as a Cake Tool #tool nuget:?package=StaticDictionaries&version=1.3.1
StaticDictionaries π
Simple high performance solution for data hardcoding. Smart. Flexible. Powerful.
Powered by source generators. Without using reflection. .NET 7 now supported β
StaticDictionaries is a convinient library for data hardcoding in your project.
Just decorate the enum
using attributes, the source generator will do the rest for you.
Minimum code and time spent - maximum result and performance. Property management has never been so convenient.
Generated methods for managing enum
without reflection will make development pleasant and faster than ever.
Installing StaticDictionaries
StaticDictionaries is available on NuGet.
dotnet add package StaticDictionaries
Install-Package StaticDictionaries
Basic usage by stepsπΈ
- Decorate your enum with
[StaticDictionary]
attribute and define arguments to generate properties:
[StaticDictionary("Surname", "Age")]
public enum User
- Decorate your enum members with
[Value]
attribute and define member values:
[Value("Brown", 27)]
John = 1
- Build project to run source generator and get access to generated methods:
int id = User.John.Id();
int age = User.John.Age();
string name = User.John.Name();
string surname = User.John.Surname();
Powerful enum
management π¦Ύ
Source generator creates some methods in [EnumName]Extensions
class for convenient and fast enum
management:
Length
quantity of all enum members.MinId
returns minId()
.MaxId
returns maxId()
.All()
returns an array of allenum
members.GetById()
returns member orNotSupportedException
.Json()
returns serializedenum
in json format.Xml()
returns serializedenum
in xml format.
Dictionary supported primitive types πΏ
CLR type | Status |
---|---|
int |
β |
bool |
β |
char |
β |
double |
β |
string |
β |
Samples π€
Employee dictionary with Name
, Age
and Active
properties:
[StaticDictionary("Name", "Age", "Active")]
public enum Employee
{
[Value("Maxim Jhonson", 18, true)]
Maxim = 1,
[Value("John Jhonson", 23, false)]
John = 2
}
public static void Main()
{
int johnAge = Employee.John.Age();
int maximAge = Employee.Maxim.Age();
string johnName = Employee.John.Name();
string maximName = Employee.Maxim.Name();
}
Source generator creates [EnumName]Extensions class that provide some powerful functionality for managing your enum
:
[StaticDictionary("Name", "IsLast")]
public enum Status
{
[Value("New state", false)]
New = 1,
[Value("In progress", false)]
InProgress = 2,
[Value("Completed", true)]
Completed = 3
}
public static void Main()
{
Status status = StatusExtensions.GetById(2);
Status[] statuses = StatusExtensions
.All()
.Where(x => !x.IsLast())
.ToArray();
}
Id()
and Name()
methods are generated by default if you do not override them.
[StaticDictionary]
public enum Metal
{
[Value]
Gold = 1,
[Value]
Ferrum = 2
}
public static void Main()
{
int goldId = Metal.Gold.Id();
string ferrumName = Metal.Ferrum.Name();
}
Important notes β οΈ
[StaticDictionary]
parameter names must not be duplicated.[StaticDictionary]
parameter names must use the English alphabet only because they will be generated into methods.- All
[Value]
attrubutes must contain such arguments quantity as[StaticDictionary]
. - All
[StaticDictionary]
enum
members can contain[Value]
attribute with arguments. - Generator creates two methods by default:
Id()
with(int)member
andName()
withnameof(member)
if you do not override them. enum
members without[Value]
attribute will be ignored.enum
property names must not be equal to [EnumName]Extensions (c# naming rules for methods).Json()
andXml()
methods generated only if you markenum
with[JsonSupport]
or[XmlSupport]
.enum
members that use bitwise operators must not contain [Value] attribute.- Parameter types are determined automatically, so all parameters in a sequence must be of the same type.
For example, all of the first types should be
string
, and all of the second types should bebool
.
Performance π
Despite the convenient format of use, the performance remained at a high level, and thanks to separate methods for working with an Enum
without reflection, performance increased significantly in some indicators:
BenchmarkDotNet=v0.13.1, OS=Windows 10.0.19044.1766 (21H2)
AMD Ryzen 5 3600, 1 CPU, 12 logical and 6 physical cores
.NET SDK=6.0.301
[Host] : .NET 6.0.6 (6.0.622.26707), X64 RyuJIT [AttachedDebugger]
DefaultJob : .NET 6.0.6 (6.0.622.26707), X64 RyuJIT
Method | Mean | Error | StdDev | Median |
---|---|---|---|---|
ClassicAccessToMemberName | 0.0001 ns | 0.0002 ns | 0.0001 ns | 0.0001 ns |
GeneratedAccessToMemberName | 0.0039 ns | 0.0041 ns | 0.0030 ns | 0.0014 ns |
ReflectionGetAllMembers | 562.4409 ns | 3.8498 ns | 3.6011 ns | 562.4710 ns |
GeneratedGetAllMembers | 5.6408 ns | 0.1011 ns | 0.0946 ns | 5.6575 ns |
GetEnumMemberById | 0.0008 ns | 0.0008 ns | 0.0007 ns | 0.0004 ns |
GeneratedGetEnumMemberById | 0.0001 ns | 0.0002 ns | 0.0002 ns | 0.0000 ns |
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
- Microsoft.CodeAnalysis.CSharp (>= 4.2.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.3.1 | 4,877 | 11/19/2022 |
1.3.1-preview1 | 163 | 11/18/2022 |
1.3.0 | 360 | 11/11/2022 |
1.2.0 | 3,042 | 10/1/2022 |
1.1.0 | 455 | 8/10/2022 |
1.0.0 | 437 | 7/10/2022 |
1.0.0-rc | 189 | 7/3/2022 |
1.0.0-beta2 | 154 | 7/2/2022 |
1.0.0-beta | 287 | 7/2/2022 |
.NET7 support