2016-09-19 8 views
-2

の要素数を取得するには、このコードを使用して列挙型の要素数を取得することが可能です:このコードは、それ自身の機能の中に入れることができますどのように簡素化C#コードC#では列挙

int numberOfElements = Enum.GetNames(typeof(MyEnum)).Length; 

、あることその正常な機能、静的1、延長または一般的な、それへの呼び出しのようなものに単純化することができるように:私はこれをしようとした場合

例えば
int numberOfElements = GetEnumEntries(MyEnum);  // something like this 
int numberOfElements = GetEnumEntries<MyEnum>(); // or this 

static public int GetEnumEntries(System.Type t) { 
    int numberOfElements = System.Enum.GetNames(typeof(t)).Length; 
} 

私は

+3

を:あなたは、typeof演算(t)を削除する必要があり、tは直接そこにトンを使用して、すでにタイプです。呼び出し側コードでは、GetNumEntries(typeof(MyEnum))としてチェックする必要があります。戻り値でメソッドを完了したと仮定します)。 –

答えて

3

一般的なアプローチを使用できます。最も難しいのは、型パラメータをコンパイル時に単独で行うことができないenumに制限することです。しかし、あなたは、この使用することができますthis answerに記載の方法で:ちょうどあなたのトライアルコードを修正するために

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; 
} 
+0

私はそれが私的である理由に従わないけれども、偉大な答えです。 –

+1

@MattParkinsちょうどタイプミス - 私はそれを修正しました。 –

+0

@MattParkins私はそれがIntelliSenseのためだと思います。プライベートアクセス修飾子を使用してメソッド生成をデフォルトにする[image](http://i.stack.imgur.com/nHp5g.png) –

2
private static int GetEnumEntries<T>() 
{ 
    return Enum.GetNames(typeof(T)).Length; 
} 
+0

それは簡単だったとは思いません。私はこの道を試したと思った。 –

0

typeof(t)はオールウェイズ代わりにあなたの列挙の実際の型のタイプのSystem.Typeに評価する「型または名前空間tが見つかりませんでした」というエラーを取得します。したがって、tを直接使用する

System.Enum.GetNames(t).Length 
+0

彼はそれを 'GetEnumEntries(typeof(MyEnum))'と呼ぶ必要があります。それは何も変わりません –

+0

@OrkhanAlikhanov確かに、彼はとにかくタイプを提供しなければなりません。この方法では、いくつかの文字を短くします。あなたの解決策でも同じことが適用され、 'typeof'だけが残されます。 – HimBromBeere

+1

typeof(t)はコンパイルされず、tは変数です。 –