{"id":25879493,"url":"https://github.com/hanachiru/rapidenum","last_synced_at":"2025-08-22T20:14:00.383Z","repository":{"id":252604751,"uuid":"840761338","full_name":"hanachiru/RapidEnum","owner":"hanachiru","description":"Enum utility with SourceGenerator for C#/.NET","archived":false,"fork":false,"pushed_at":"2025-03-01T05:41:12.000Z","size":436,"stargazers_count":50,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-01T06:21:05.991Z","etag":null,"topics":["csharp","csharp-library","csharp-sourcegenerator","dotnet"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hanachiru.png","metadata":{"files":{"readme":"README.jp.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-10T15:51:29.000Z","updated_at":"2025-03-01T05:41:15.000Z","dependencies_parsed_at":"2025-03-01T06:31:41.162Z","dependency_job_id":null,"html_url":"https://github.com/hanachiru/RapidEnum","commit_stats":null,"previous_names":["hanachiru/rapidenum"],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanachiru%2FRapidEnum","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanachiru%2FRapidEnum/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanachiru%2FRapidEnum/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hanachiru%2FRapidEnum/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hanachiru","download_url":"https://codeload.github.com/hanachiru/RapidEnum/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241509701,"owners_count":19974079,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","csharp-library","csharp-sourcegenerator","dotnet"],"created_at":"2025-03-02T13:18:52.496Z","updated_at":"2025-03-02T13:18:53.487Z","avatar_url":"https://github.com/hanachiru.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RapidEnum\n\n[English](README.md)\n\nRapidEnum は、C#/.NET 用の高速に動作する列挙型ユーティリティを提供するソースジェネレーターです。[.NET 標準の API](https://learn.microsoft.com/en-us/dotnet/api/system.enum?view=net-8.0)よりも高速で、全てのメソッドでゼロアロケーションを達成しています。\n\n**Package - [RapidEnum](https://www.nuget.org/packages/RapidEnum)**\n\n![PerformanceComparison](./Images/PerformanceComparison.png)\n\n.NET 標準の API よりもかなりパフォーマンスが向上されています。また[FastEnum v1.8.0](https://github.com/xin9le/FastEnum/releases/tag/v1.8.0)よりも高速で動作します。パフォーマンス比較の詳細は[こちら](#パフォーマンス比較)を参照してください。\n\nRapidEnum は[FastEnum](https://github.com/xin9le/FastEnum)に多大の影響を受けています。API は FastEnum に非常に似ています。素晴らしいライブラリを作成してくださった[xin9le](https://github.com/xin9le)さんに感謝しています！\n\n# 目次\n\n- [要件](#要件)\n- [インストール](#インストール)\n  - [NuGet](#NuGet)\n  - [Unity](#Unity)\n\t- [asmdefの設定](#asmdefの設定)\n- [使い方](#使い方)\n  - [基本的な使い方](#基本的な使い方)\n  - [任意の列挙型に利用する方法](#任意の列挙型に利用する方法)\n- [パフォーマンス比較](#パフォーマンス比較)\n\n# 要件\n\n- .NET Standard2.0 以上\n- Unity 2022.3.12f1 以上\n\n# インストール\n\n## NuGet\n\n```shell\n$ dotnet add package RapidEnum\n```\n\n**nuget.org : [RapidEnum](https://www.nuget.org/packages/RapidEnum)**\n\n## Unity\n\nPackage Manager から下記 git URL を追加してください。\n\n```\nhttps://github.com/hanachiru/RapidEnum.git?path=/RapidEnum.Unity/Packages/com.hanachiru.rapidenum\n```\n\n![UPM](./Images/UPM.png)\n\n### asmdefの設定\n`.asmdef`を作成していない場合は下記は関係ありません。\n\n`.asmdef`の`Override References`をオンにしている場合には、`Assembly References`に`RapidEnum.Core.dll`を追加する必要があります。\n\n\u003cimg src=\"./Images/AssemblyReferences.png\" width=\"300\" /\u003e\n\n# 使い方\n\n## 基本的な使い方\n\n対象の列挙型に`[RapidEnum]`属性を付けると、列挙型ユーティリティクラスが生成されます。このとき`public`か`internal`の列挙型に対してのみ有効なので注意してください。\n\n```csharp\n[RapidEnum]\npublic enum Weather\n{\n    Sun,\n    Cloud,\n    Rain,\n    Snow\n}\n```\n\n`[RapidEnum]`属性を付与した列挙型に対応する、`列挙型名 + EnumExtensions`クラスに関連メソッドが定義されます。\n\n```csharp\n// Sun,Cloud,Rain,Snow\nIReadOnlyList\u003cWeather\u003e values = WeatherEnumExtensions.GetValues();\n\n// Sun,Cloud,Rain,Snow\nIReadOnlyList\u003cstring\u003e names = WeatherEnumExtensions.GetNames();\n\n// Rain\nstring name = WeatherEnumExtensions.GetName(Weather.Rain);\n\n// Cloud\nstring str = Weather.Cloud.ToStringFast();\n\n// True\nbool defined = WeatherEnumExtensions.IsDefined(\"Sun\");\n\n// Sun\nWeather parse = WeatherEnumExtensions.Parse(\"Sun\");\n\n// True\n// Sun\nbool tryParse = WeatherEnumExtensions.TryParse(\"Sun\", out Weather value);\n```\n\n## 任意の列挙型に利用する方法\n\n`[RapidEnum]`属性を列挙型に付与する以外にも、`[RapidEnumWithType]`属性を利用することで、任意の列挙型に対してユーティリティクラスを生成することができます。\n\n`public`か`internal`である`static partial class`に対して、引数に対象の列挙型を指定した`[RapidEnumWithType]`属性を付与してください。このときクラス名は任意の文字列で大丈夫ですが、`列挙型名 + EnumExtensions`だと分かりやすいです。\n\n```csharp\n// System.DateTimeKind has Unspecified, Utc, Local\n[RapidEnumWithType(typeof(DateTimeKind))]\npublic static partial class DateTimeKindEnumExtensions\n{\n}\n```\n\n`[RapidEnum]`を利用した場合と比べてパフォーマンスに差があるわけではありません。サードパーティ製のライブラリが提供する列挙型など、`[RapidEnum]`が付与できない場合は`[RapidEnumWithType]`を利用してください。\n\n```csharp\n// Unspecified,Utc,Local\nIReadOnlyList\u003cDateTimeKind\u003e values = DateTimeKindEnumExtensions.GetValues();\n\n// Unspecified,Utc,Local\nIReadOnlyList\u003cstring\u003e names = DateTimeKindEnumExtensions.GetNames();\n\n// Local\nstring name = DateTimeKindEnumExtensions.GetName(DateTimeKind.Local);\n\n// Local\nstring str = DateTimeKind.Local.ToStringFast();\n\n// True\nbool defined = DateTimeKindEnumExtensions.IsDefined(\"Local\");\n\n// Local\nDateTimeKind parse = DateTimeKindEnumExtensions.Parse(\"Local\");\n\n// True\n// Local\nbool tryParse = DateTimeKindEnumExtensions.TryParse(\"Local\", out DateTimeKind value);\n```\n\n## Name と Value をペアで取得する\n\n列挙型の Name と Value をペアで取得したい場合は、`GetMembers`メソッドや`GetMember`メソッドを利用してください。\n\n```csharp\nWeatherEnumExtensions.Member member = WeatherEnumExtensions.GetMember(Weather.Rain);\nvar (name, value) = member;\n\nforeach (WeatherEnumExtensions.Member item in WeatherEnumExtensions.GetMembers())\n{\n    Console.WriteLine($\"Name : {item.Name}, Value : {item.Value}\");\n}\n```\n\n# パフォーマンス比較\n\n| Method              |       Mean |     Error |    StdDev |     Median |   Gen0 | Allocated |\n| ------------------- | ---------: | --------: | --------: | ---------: | -----: | --------: |\n| RapidEnum_GetValues |  0.0042 ns | 0.0059 ns | 0.0052 ns |  0.0028 ns |      - |         - |\n| FastEnum_GetValues  |  0.0083 ns | 0.0086 ns | 0.0081 ns |  0.0055 ns |      - |         - |\n| NET_GetValues       | 64.4620 ns | 0.9908 ns | 0.9268 ns | 64.2767 ns | 0.0048 |      40 B |\n| RapidEnum_GetNames  |  0.0006 ns | 0.0017 ns | 0.0015 ns |  0.0000 ns |      - |         - |\n| FastEnum_GetNames   |  0.0025 ns | 0.0031 ns | 0.0028 ns |  0.0012 ns |      - |         - |\n| NET_GetNames        | 12.3820 ns | 0.1086 ns | 0.1016 ns | 12.4076 ns | 0.0067 |      56 B |\n| RapidEnum_GetName   |  0.0069 ns | 0.0085 ns | 0.0071 ns |  0.0039 ns |      - |         - |\n| FastEnum_GetName    |  0.2530 ns | 0.0070 ns | 0.0065 ns |  0.2527 ns |      - |         - |\n| NET_GetName         | 15.9190 ns | 0.0524 ns | 0.0490 ns | 15.9046 ns | 0.0029 |      24 B |\n| RapidEnum_ToString  |  0.0103 ns | 0.0049 ns | 0.0046 ns |  0.0110 ns |      - |         - |\n| FastEnum_ToString   |  0.4844 ns | 0.0062 ns | 0.0052 ns |  0.4845 ns |      - |         - |\n| NET_ToString        |  6.1700 ns | 0.0451 ns | 0.0376 ns |  6.1493 ns | 0.0029 |      24 B |\n| RapidEnum_IsDefines |  0.0026 ns | 0.0036 ns | 0.0034 ns |  0.0000 ns |      - |         - |\n| FastEnum_IsDefines  |  4.6724 ns | 0.0583 ns | 0.0545 ns |  4.6434 ns |      - |         - |\n| NET_IsDefines       | 14.5923 ns | 0.0355 ns | 0.0332 ns | 14.5996 ns |      - |         - |\n| RapidEnum_Parse     |  0.9258 ns | 0.0161 ns | 0.0150 ns |  0.9240 ns |      - |         - |\n| FastEnum_Parse      |  4.6223 ns | 0.0082 ns | 0.0073 ns |  4.6192 ns |      - |         - |\n| NET_Parse           |  8.8707 ns | 0.0965 ns | 0.0903 ns |  8.8293 ns |      - |         - |\n| RapidEnum_TryParse  |  0.7633 ns | 0.0097 ns | 0.0090 ns |  0.7657 ns |      - |         - |\n| FastEnum_TryParse   |  4.6869 ns | 0.0254 ns | 0.0212 ns |  4.6852 ns |      - |         - |\n| NET_TryParse        |  8.8433 ns | 0.0609 ns | 0.0569 ns |  8.8268 ns |      - |         - |\n\n![PerformanceComparison](./Images/PerformanceComparison.png)\n\n[Benchmark Source](https://github.com/hanachiru/RapidEnum/tree/main/RapidEnum.Benchmark)\n\n```\nBenchmarkDotNet v0.14.0, macOS Sonoma 14.4.1 (23E224) [Darwin 23.4.0]\nApple M2 Pro, 1 CPU, 12 logical and 12 physical cores\n.NET SDK 8.0.303\n[Host]     : .NET 8.0.7 (8.0.724.31311), Arm64 RyuJIT AdvSIMD\nDefaultJob : .NET 8.0.7 (8.0.724.31311), Arm64 RyuJIT AdvSIMD\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhanachiru%2Frapidenum","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhanachiru%2Frapidenum","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhanachiru%2Frapidenum/lists"}