对于任何数值,Enum.TryParse都返回true

mwe*_*ber 52 c# validation enums tryparse

在使用Enum.TryParse时,我遇到了一种我没想到的行为.

如果我有一个枚举:

public enum MyEnum
{
  ValueA,
  ValueB,
  ValueC
}
Run Code Online (Sandbox Code Playgroud)

然后我将一个数值(作为一个字符串)传递给Enum.TryParse,如:

MyEnum outputEnum;
bool result = Enum.TryParse("1234", out outputEnum);
Run Code Online (Sandbox Code Playgroud)

尽管字符串"1234"不是可能的值,但结果将返回true,而我的outputEnum将具有值1234.

有没有办法可以避免这种行为?我正在尝试编写一个函数,它将任意字符串输入作为枚举处理,这在我的错误输入检测中引发了一些麻烦.

SLa*_*aks 75

此行为是设计使然.

文件说:

.如果value是不表示TEnum枚举的基础值的整数的字符串表示形式,则该方法返回枚举成员,其基础值的值转换为整数类型.如果不希望出现这种情况,请调用IsDefined方法以确保整数的特定字符串表示形式实际上是TEnum的成员.

调用Enum.IsDefined以确认您解析的值实际上存在于此特定中enum.

如果你正在处理[Flags]枚举(bitmasks),它会变得更复杂.


小智 11

像这样使用它

bool result = Enum.TryParse("1234", out MyEnum outputEnum) && Enum.IsDefined(typeof(MyEnum), outputEnum);
Run Code Online (Sandbox Code Playgroud)

result 的值将为 false,但 outputEnum 的值仍然是 1234