如果value是Enum值的一部分,则查找值

时间:2013-11-04 11:58:19

标签: c# .net enums

我有以下的枚举,我想知道我是否有像 string = March 这样的变量 有一种简单的方法可以通过API查找值(March)是否是枚举

的一部分
public enum Month
{
    NotSet = 0,
    January = 1,
    February = 2,
    March = 3,
    April = 4,
    May = 5,
    June = 6,
    July = 7,
    August = 8,
    September = 9,
    October = 10,
    November = 11,
    December = 12
}

3 个答案:

答案 0 :(得分:5)

您可以执行以下操作:

Month result;
if(System.Enum.TryParse(value, true, out result)) {
    // is defined
}

其中true控制区分大小写(或不区分大小)。

(请注意,这实际上是TryParse<Month>(...),但编译器会推断<Month>中的out result,因为result定义为Month

答案 1 :(得分:4)

如果您只是想知道枚举中是否定义了某个值,请使用Enum.IsDefined

bool isDefined = Enum.IsDefined(typeof(Month), "March")

如果要解析该值,请查看Enum.TryParse

  

将一个或多个枚举常量的名称或数值的字符串表示形式转换为等效的枚举对象。返回值表示转换是否成功。

您可以使用以下重载...

public static bool TryParse<TEnum>(
    string value,
    bool ignoreCase,
    out TEnum result
)

...像这样:

Month month;
if (Enum.TryParse<Month>("March", true, out month)) {
    // ...
}

答案 2 :(得分:3)

如何使用Enum.GetNames

  

检索指定的常量名称数组   枚举。

像;

bool b = Enum.GetNames(typeof(Month)).Contains("March");

或作为Raphaël mentioned ;

if(Enum.GetName(typeof(Month), "March") != null)