93

私はこのような列挙型を持っています:

 public enum PromotionTypes
{
    Unspecified = 0, 
    InternalEvent = 1,
    ExternalEvent = 2,
    GeneralMailing = 3,  
    VisitBased = 4,
    PlayerIntroduction = 5,
    Hospitality = 6
}

この列挙型に指定した番号が含まれているかどうかを確認したいと思います。例:4を指定すると、列挙型にはそれが含まれるため、Trueを返します。7を指定すると、この列挙型には7がないため、Falseを返します。Enum.IsDefineを試しましたが、文字列値のみをチェックします。どうやってやるの?

4

4 に答える 4

214

この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
}

ソース

于 2012-09-06T01:56:18.117 に答える
11

これを試して:

IEnumerable<int> values = Enum.GetValues(typeof(PromotionTypes))
                              .OfType<PromotionTypes>()
                              .Select(s => (int)s);
if(values.Contains(yournumber))
{
      //...
}
于 2012-09-06T01:58:39.673 に答える
9

を使用する必要がありますEnum.IsDefined

Enum.IsDefineを試しましたが、文字列値のみをチェックします。

少なくとも私のマシンでは、文字列値とint(基になる)値の両方をチェックすると100%確信しています。

于 2012-09-06T01:59:27.583 に答える
3

文字列値の列挙型を確認して使用したい場合があります。

string strType;
if(Enum.TryParse(strType, out MyEnum myEnum))
{
    // use myEnum
}
于 2019-08-21T08:27:10.877 に答える