列挙型で定義されたアイテムの数を取得するにはどうすればよいですか?列挙型で定義されたアイテムの総数
答えて
列挙内のすべての項目の名前を表す配列を返すstaticメソッドEnum.GetNames
を使用できます。この配列のlengthプロパティは、列挙型で定義された項目の数と同じです。
var myEnumMemberCount = Enum.GetNames(typeof(MyEnum)).Length;
Enum.GetValues(typeof(MyEnum))。
Enum.GetNamesを使用すると、enumの値のIEnumerableを返し、結果のIEnumerableを取得することができます。
GetNamesはGetValuesと同じ結果を生成しますが、より高速です。
これまでのコードサンプルを追加するだけです。で
enum MyType {
Type1,
Type2,
Type3,
NumberOfTypes
}
:
class Program
{
static void Main(string[] args)
{
int enumlen = Enum.GetNames(typeof(myenum)).Length;
Console.Write(enumlen);
Console.Read();
}
public enum myenum
{
value1,
value2
}
}
私はこの質問へのCの答えで見た気の利いたトリックは、単に列挙しているどのように多くの要素を伝えるために列挙型への最後の要素を追加し、それを使用します0以外の開始値を定義している場合は、NumberOfTypes - Type1を使用して要素の数を確認できます。
この方法がEnumを使用するよりも高速であるかどうかは不明ですし、この情報を確認するためにEnumがあるので、これが正しい方法であるかどうかもわかりません。
GetNamesが利用できないので、XNAでこれを行うことができるので、これはいいです。 –
クールなトリックですが、これはGetNames()よりも高速です。 –
foreachを使用して列挙型を循環するコードに注意してください。配列の最後を読むことができます! –
質問です:
どのように私は列挙型で定義された項目の数を得ることができますか?
「アイテム」の数は、実際には2つの全く異なるものを意味する可能性があります。次の例を考えてみましょう。
enum MyEnum
{
A = 1,
B = 2,
C = 1,
D = 3,
E = 2
}
MyEnum
で定義されている「アイテム」の数はいくつですか?
アイテム数は5ですか? (A
、B
、C
、D
、E
)
それとも3ですか? (1
、2
、3
)
次のように名(5)MyEnum
に定義された数を計算することができます。
var namesCount = Enum.GetNames(typeof(MyEnum)).Length;
次のように(3)を計算することができるMyEnum
で定義さ値の数。 Visual Basicのために
var valuesCount = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Distinct().Count();
これはトップに投票する必要があります。 – Xonatron
'var valuesCount =((MyEnum [])Enum.GetValues(typeof(MyEnum)))。Distinct()。Count();'最後の行を書き換える別の方法です。 –
:
[Enum].GetNames(typeof(MyEnum)).Length
は私と一緒に動作しませんでしたが、 [Enum].GetNames(GetType(Animal_Type)).length
はなかったです。
なぜdownvote?これは私の問題を修正しました。VBの正しい構文です。質問はC#でタグ付けされていますが、それでも便利です。 –
おそらく質問はC#とタグ付けされているので、下降はおそらくC#を使用していないと言わなかった。 – idbrii
私はこれを今見ていて、現在のソリューションの可読性に満足していませんでした。非公式に、あるいは小規模なプロジェクトでコードを書く場合は、列挙の最後に「長さ」という項目を追加するだけです。この方法では、あなただけ入力する必要があります。他の人があなたのコードを使用しようとしている場合はもちろん
var namesCount = (int)MyEnum.Length;
- または私はこのケースでは、私には適用されませんでした他の多くの状況下では確信している - この解決策かもしれませんひどいことをアドバイスされた病気からどこにでもいてください。
これはまた、0から始まる列挙型に依存しています(デフォルトですが、決して保証されません)。さらに、それは通常の列挙型使用のためのインテリセンスを非常に混乱させる。これはほぼ常に**恐ろしい**アイデアです。 – BradleyDotNET
それは長くかかりませんでした:) – EnergyWasRaw
興味深いことに、何か良いことがいつ来るかわからないと思います。私は自分のソリューションを排除するための最善の試みをしましたが、共有するのに十分興味深いと感じました! – EnergyWasRaw
あなた自身ができるだけ頻繁に私は、あなたが一般的なようにそれを実装することができないとして、上記の溶液を書く見つけた場合:
public static int GetEnumEntries<T>() where T : struct, IConvertible
{
if (!typeof(T).IsEnum)
throw new ArgumentException("T must be an enumerated type");
return Enum.GetNames(typeof(T)).Length;
}
- 1. Javaで配列定数で定義された列挙型
- 2. 配列定数で定義された列挙型
- 3. のPostgreSQL:これは、列挙型の定義で列挙型
- 4. CLRユーザー定義型列挙型
- 5. Enum.Isフラグ付き列挙型で定義されています
- 6. 列挙型の定数式
- 7. 列挙型「エラーレベル」のユーザー定義例外
- 8. UserConsentVerifierAvailability Windows 10の列挙型定義
- 9. Swiftで定義されたブロック内で列挙型を評価する
- 10. 列挙型を定義するベストプラクティス?
- 11. DBの列挙型または列挙型の列挙型
- 12. 私は列挙型の値で定義されたカスタム属性を取得したいWinRTの.NETアプリケーション(C#の)で列挙型の値
- 13. 列挙型から変数を定義する方法は?
- 14. 格納された列挙型の条件付き列挙型スイッチ
- 15. 列挙型の値の生成定数
- 16. スウィフトネストされた列挙型共通タイプ
- 17. 列挙型にバインドされたドロップダウンリスト
- 18. は、ネストされた列挙型
- 19. Python enumでSQLAlchemy列挙型列を定義すると、 "ValueError:有効な列挙型ではありません"
- 20. 列挙型の列挙型の列挙型へのアクセス
- 21. 列挙型変数
- 22. 強く型付けされた観察可能なKnockout.jsの配列のアイテムの総数を取得
- 23. 公開列挙型指定されたプロパティ
- 24. 不明列挙型定数javax.persistence.CascadeType.DETACH
- 25. Azure関数から返されたJSONの列挙型として列挙型をシリアル化
- 26. 変数を使った列挙型の列挙
- 27. 列挙型の中の列挙型
- 28. 列挙型の列挙型の作成
- 29. 1つの列挙型または別の列挙型を指す変数?
- 30. コンストラクタは未定義ですか?列挙型エラー
合意しました...ここに私が見つけたリンクhttp://www.csharp411.com/c-count-items-in-an-enum/ –
Enum.GetValuesを使うこともできます。 – Xonatron
System.Enum.GetNames(System名前空間がまだ含まれていない場合) –