int値を列挙型にキャストしているときに廃止された値をスキップする方法はありますか?私は以下の作業例を持っています:廃止された列挙を解析する
using System;
public class Program
{
public static void Main()
{
int valueInt = 1;
var en = (TestObsolete)valueInt;
Console.WriteLine(en);
}
}
enum TestObsolete
{
Undefined,
[Obsolete]
ValueA = 1,
ValueB=1,
}
私はValueAを取得していますが、ValueBを取得することを期待しています。特に、私は、次のシグネチャを持つ一般的な方法に興味がある:
public static T ParseEnumWithoutObsolete<T>(int val) where T: struct {
が、私はそのような何かをしようとした:
T @enum;
var enumValues = Enum.GetValues(typeof(T)).Cast<T>();
var obsoleteValues = enumValues.Where(a => typeof(T).GetField(a.ToString()).CustomAttributes.Any(t => t is ObsoleteAttribute));
var activeValues = enumValues.Except(obsoleteValues);
が、次の段階で立ち往生。
OMG、予期しないターン。私はそうしようとしましょう –
複数の列挙型メンバーが時代遅れでなくても同じ値を持つことができるので、この辞書は必ずしもすべての古い名前を返すわけではありません。その場合のより興味深い辞書はnameToValueです。 – Lazlo