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

我遇到了使用Enum.TryParse的时候并不期待的行为。

如果我有一个枚举:

public enum MyEnum { ValueA, ValueB, ValueC } 

然后我将一个数值(作为一个string)传递给Enum.TryParse,如下所示:

 MyEnum outputEnum; bool result = Enum.TryParse("1234", out outputEnum); 

尽pipestring“1234”不是一个可能的值,结果将返回为true,并且我的outputEnum将具有值1234。

有没有办法可以避免这种行为? 我试图写一个函数,将处理任意stringinput作为一个枚举,这在我的坏input检测中抛出了一点monkeywrench。

此行为是devise使然。

该文件说:

。 如果value是不表示TEnum枚举的基础值的整数的string表示forms,则该方法返回一个枚举成员,其基础值被转换为整数types的值。 如果此行为不受欢迎,请调用IsDefined方法以确保整数的特定string表示forms实际上是TEnum的成员。

调用Enum.IsDefined来强化你parsing的值实际上存在于这个特定的enum

如果你处理[Flags]枚举(位掩码),它会变得更加复杂。