1

我有如下枚举,我想知道我是否有一个像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
}
4

3 回答 3

5

您可以执行以下操作:

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

那里true控制区分大小写(或不区分)。

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

于 2013-11-04T11:59:50.293 回答
4

如果您只想找出某个值是否在枚举中定义,请使用Enum.IsDefined

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

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

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

您可以使用以下重载...</p>

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

… 像这样:

Month month;
if (Enum.TryParse<Month>("March", true, out month)) {
    // ...
}
于 2013-11-04T11:59:56.177 回答
3

怎么用Enum.GetNames

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

喜欢;

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

或者正如拉斐尔提到的那样;

if(Enum.GetName(typeof(Month), "March") != null)
于 2013-11-04T12:00:50.987 回答