枚举.TryParse奇怪的行为
本文关键字:TryParse 枚举 | 更新日期: 2023-09-27 18:17:51
为什么这个测试通过了?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方法(String, TEnum)
If value是一个不对应于的命名常量的名称则该方法返回false。如果值是字符串表示形式不表示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());
}
}
使用Enum。IsDefined(Type enumType,Object value) -返回一个具有指定值的常量是否存在于指定的枚举中。
MSDN:枚举。IsDefined方法