Enum.TryParse奇怪的行为

时间:2014-08-14 06:03:03

标签: c# .net enums

为什么这个测试通过了? TestEnum不包含值和#34; 5"的选项。所以这个测试应该失败,但它没有。

        private enum TestEnum
        {
            FirstOption = 2,
            SecontOption = 3
        }

        [Test]
        public void EnumTryParseIntValue()
        {
            TestEnum enumValue;

            bool result = Enum.TryParse<TestEnum>(5.ToString(), out enumValue);

            Assert.IsTrue(result);
        }

2 个答案:

答案 0 :(得分:6)

Enum.TryParse Method (String, TEnum)

  

如果value是与命名常量不对应的名称   TEnum,该方法返回false。如果value是字符串表示   一个不表示TEnum基础值的整数   枚举,该方法返回其底层的枚举成员   value是转换为整数类型的值。如果出现这种情况   不受欢迎,调用IsDefined方法来确保特定的   整数的字符串表示实际上是TEnum的成员。

“返回一个枚举成员,其基础值的值转换为整数类型”
如果该值不存在,则返回整数。我不认为回到5是“枚举成员”,但这就是它的工作原理。如果你解析2,你会得到FirstOption。

if (Enum.IsDefined(typeof(TestEnum), 5.ToString()))
{
    result = Enum.TryParse<TestEnum>(5.ToString(), out enumValue);
    Debug.WriteLine(result);
    if (result)
    {
        Debug.WriteLine(enumValue.ToString());
    }
}

答案 1 :(得分:1)

Use Enum.IsDefined(Type enumType,Object value) - 返回指定枚举中是否存在具有指定值的常量的指示。

MSDN: Enum.IsDefined Method