关于如何转换枚举以及如果解析的值超出范围会发生什么,还有一些其他问题,例如:
public enum SomeTypes
{
SomeType1 = 1,
SomeType2 = 2,
SomeType3 = 3
}
public class SomeClass
{
...
var inRange = (SomeTypes) 1;
var outOfRange = (SomeTypes) 5;
...
}
Run Code Online (Sandbox Code Playgroud)
超出范围不会产生任何错误。但是我发现如果您尝试使用超出范围的值序列化-反序列化枚举,您会遇到奇怪的错误。例如,我得到了类似的东西
“错误解析消息或超时”
这让我一直在寻找枚举超出范围之外的其他原因。
处理此问题的建议是通过Enum.IsDefined. 这似乎工作得很好,但是在msdn上有一个相当大胆的警告:
“不要使用 System.Enum.IsDefined(System.Type,System.Object) 进行枚举范围检查,因为它基于枚举的运行时类型,该类型可能会因版本而异。”
所以,我的问题是,我们可以安全地使用Enum.IsDefined或检查枚举的值是否超出范围而不使用Enum.IsDefined?