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]
枚举(位掩码),它会变得更加复杂。