为什么该测试通过? TestEnum不包含和值为“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);
        }

最佳答案

Enum.TryParse Method (String, 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());
    }
}

09-30 17:15