はじめに
「Enums.NET」をプロジェクトに追加することで
パフォーマンスに優れた列挙型を使用できるようになります
インストール
Visual Studio メニューの「ツール>NuGet パッケージ マネージャー>
ソリューションの NuGet パッケージの管理」を選択します
「参照」タブを選択して、検索欄に「Enums.NET」と入力して
表示された「Enums.NET」を選択します
インストールしたいプロジェクトをチェックして「インストール」ボタンを押します
パフォーマンス検証
using EnumsNET; using System; using System.Diagnostics; using System.Text; public static class Program { private enum TYPE { GRASS, FIRE, WATER, } private static void Main() { int count = 10000000; var sb = new StringBuilder(); var sw = new Stopwatch(); // 通常の列挙型 sw.Start(); for ( int i = 0; i < count; i++ ) { var result = Enum.GetValues( typeof( TYPE ) ) as TYPE[]; } sw.Stop(); sb.AppendFormat( "Enum: {0}", sw.Elapsed ).AppendLine(); // Enums.NET sw.Restart(); for ( int i = 0; i < count; i++ ) { var result = Enums.GetMembers<TYPE>(); } sw.Stop(); sb.AppendFormat( "Enums: {0}", sw.Elapsed ).AppendLine(); Console.WriteLine( sb ); } }
種類 | 時間 |
---|---|
通常の列挙型 | 9.61 秒 |
Enums.NET | 0.42 秒 |
機能
using EnumsNET; using System; public static class Program { [Flags] private enum TYPE { NONE = 0, GRASS = 1, FIRE = 2, WATER = 4, } private static void Main() { // 列挙型のすべての要素を取得 var members = Enums.GetMembers<TYPE>(); var values = Enums.GetValues<TYPE>( EnumMemberSelection.Distinct ); // 列挙型の要素数を取得 Console.WriteLine( Enums.GetMemberCount<TYPE>() ); // 4 // 指定されたすべてのフラグを含む場合 true Console.WriteLine( TYPE.GRASS.HasAllFlags( TYPE.GRASS ) ); // True // 指定されたいずれかのフラグを含む場合 true Console.WriteLine( TYPE.GRASS.HasAnyFlags( TYPE.GRASS ) ); // True // 指定されたフラグを削除して返します Console.WriteLine( TYPE.GRASS.RemoveFlags( TYPE.GRASS ) ); // NONE // ToString と同等 Console.WriteLine( TYPE.GRASS.AsString() ); // GRASS // 要素名を取得 Console.WriteLine( TYPE.GRASS.GetName() ); // GRASS // 指定された要素を列挙型に含む場合 true Console.WriteLine( ( ( TYPE )4 ).IsValid() ); // True // 指定された文字列を列挙型に変換 Console.WriteLine( Enums.Parse<TYPE>( "GRASS" ) ); // GRASS } }