为什么这个测试通过了? 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);
}
答案 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) - 返回指定枚举中是否存在具有指定值的常量的指示。