93

我有一个这样的枚举:

 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 但它只检查字符串值。我怎样才能做到这一点?

4

4 回答 4

214

IsDefined方法需要两个参数。第一个参数是要检查的枚举类型。此类型通常使用 typeof 表达式获得。第二个参数被定义为基本对象。它用于指定整数值或包含要查找的常量名称的字符串。返回值是一个布尔值,如果值存在则为 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

Try this:

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

You should use Enum.IsDefined.

I tried Enum.IsDefine but it only check the String value.

I'm 100% sure it will check both string value and int(the underlying) value, at least on my machine.

于 2012-09-06T01:59:27.583 回答
3

也许您想检查并使用字符串值的枚举:

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