.net 3.5でenum.getValuesをenumする方法は?
質問
.NET 4.0では、使用します System.Enum.GetValues(typeof(Gender))
enumアイテムのリストを取得します。
完全な例では、この方法で列挙値を探すために使用します。
Gender retVal = Gender.Male;
foreach (Gender enumType in System.Enum.GetValues(typeof(Gender)))
{
if (enumType.ToString().Trim().ToUpper().Substring(0,1).Equals(stringToEnum.Trim().ToUpper()))
{
retVal = enumType;
break;
}
}
しかし、どうすれば.NET 3.5(ポケットPC)でこれを行うことができますか?
前もって感謝します !
以下の回答を使用しますが、それは私にはうまくいきません。これがコードです:
列挙値:
namespace Ionic.Zlib
{
public enum CompressionLevel
{
Level0 = 0,
None = 0,
Level1 = 1,
BestSpeed = 1,
Level2 = 2,
Level3 = 3,
Level4 = 4,
Level5 = 5,
Level6 = 6,
Default = 6,
Level7 = 7,
Level8 = 8,
BestCompression = 9,
Level9 = 9,
}
}
使用法:
新しいオブジェクトを初期化するのが恋しいです。これは今動作します:
public static Ionic.Zlib.CompressionLevel GetCompressionLevel(string Expression)
{
Ionic.Zlib.CompressionLevel result = Ionic.Zlib.CompressionLevel.None;
foreach (Ionic.Zlib.CompressionLevel item in EnumGetValues(new Ionic.Zlib.CompressionLevel()))
{
if(object.Equals(item.ToString().Trim().ToUpper(), Expression.Trim().ToUpper()))
{
result = item;
break;
}
}
return result;
}
解決
ブログ投稿があります ここ (アーカイブ ここ)リフレクションでそれを達成します:
public IEnumerable<Enum> GetValues(Enum enumeration)
{
List<Enum> enumerations = new List<Enum>();
foreach (FieldInfo fieldInfo in enumeration.GetType().GetFields(BindingFlags.Static | BindingFlags.Public))
{
enumerations.Add((Enum)fieldInfo.GetValue(enumeration));
}
return enumerations;
}
他のヒント
System.Enum.GetValues
.NET CF 3.5ではサポートされていません。たとえば、ここをご覧ください。
Shamp00の回答に加えて、汎用型パラメーターを使用して静的メソッドを作成することをお勧めします。そうすれば、列挙タイプの変数をメソッドに渡す必要はありません。
public static class EnumHelper
{
public static TEnum[] GetValues<TEnum>()
{
return typeof(TEnum)
.GetFields(BindingFlags.Static | BindingFlags.Public)
.Select(fieldInfo => (TEnum)fieldInfo.GetValue(null))
.ToArray();
}
}
通常、私は「ヘルパー」で終わるクラスが好きではありませんが、 Enum
組み込みと矛盾します Enum
-クラス。
この方法を使用するには、列挙タイプでそれを呼び出すだけです。
var values = EnumHelper.GetValues<MyEnum>();
所属していません StackOverflow