このような列挙型があります:
public enum PromotionTypes
{
Unspecified = 0,
InternalEvent = 1,
ExternalEvent = 2,
GeneralMailing = 3,
VisitBased = 4,
PlayerIntroduction = 5,
Hospitality = 6
}
このEnumに、指定した数値が含まれているかどうかを確認します。たとえば、4を指定すると、Enumにそれが含まれるので、Trueを返します。7を指定すると、このEnumには7が存在しないため、Falseを返します。 Enum.IsDefineを試しましたが、文字列値のみをチェックします。どうやってやるの?
IsDefined
メソッドには、2つのパラメーターが必要です。 最初のパラメーターは、チェックする列挙のタイプです。このタイプは通常、typeof式を使用して取得されます。 2番目のパラメーターは、基本オブジェクトとして定義されます。整数値または検索する定数の名前を含む文字列を指定するために使用されます。戻り値は、値が存在する場合はtrue、存在しない場合はfalseになるブール値です。
enum Status
{
OK = 0,
Warning = 64,
Error = 256
}
static void Main(string[] args)
{
bool exists;
// Testing for Integer Values
exists = Enum.IsDefined(typeof(Status), 0); // exists = true
exists = Enum.IsDefined(typeof(Status), 1); // exists = false
// Testing for Constant Names
exists = Enum.IsDefined(typeof(Status), "OK"); // exists = true
exists = Enum.IsDefined(typeof(Status), "NotOK"); // exists = false
}
これを試して:
IEnumerable<int> values = Enum.GetValues(typeof(PromotionTypes))
.OfType<PromotionTypes>()
.Select(s => (int)s);
if(values.Contains(yournumber))
{
//...
}
Enum.IsDefined
を使用する必要があります。
Enum.IsDefineを試しましたが、文字列値のみをチェックします。
少なくとも私のマシンでは、文字列値とint(基になる)値の両方をチェックすることを100%確信しています。
たぶん、文字列値の列挙をチェックして使用したいかもしれません:
if(Enum.TryParse(strType, out MyEnum myEnum)))
{
// use myEnum
}