gpt4 book ai didi

c# - 检查值是否在枚举范围内而不使用 IsDefined

转载 作者:行者123 更新时间:2023-12-04 02:22:25 25 4
gpt4 key购买 nike

关于如何转换枚举以及如果解析的值超出范围会发生什么,还有一些其他问题,例如:

public enum SomeTypes
{
SomeType1 = 1,
SomeType2 = 2,
SomeType3 = 3
}

public class SomeClass
{
...
var inRange = (SomeTypes) 1;
var outOfRange = (SomeTypes) 5;
...
}

超出范围不会产生任何错误。
但是我发现如果您尝试使用超出范围的值序列化-反序列化枚举,您会遇到奇怪的错误。例如,我得到了类似的东西

"error parsing the message or timeout exceeded"



这让我一直在寻找枚举超出范围之外的其他原因。

处理此问题的建议是通过 Enum.IsDefined .这似乎工作得很好,但是在 msdn 上有这个相当大胆的警告:

"Do not use System.Enum.IsDefined(System.Type,System.Object) for enumeration range checks as it is based on the runtime type of the enumeration, which can change from version to version."



所以,我的问题是,我们可以安全地使用 Enum.IsDefined或者在不使用 Enum.IsDefined 的情况下检查枚举值是否超出范围的正确方法是什么? ?

最佳答案

使用 Enum.GetValues() :

public bool IsInRange(int value){
var values = Enum.GetValues(typeof(SomeTypes)).Cast<int>().OrderBy(x => x);

return value >= values.First() && value <= values.Last();
}

[编辑]

如果您想检查项目是否已定义,而不仅仅是检查它是否在范围内,您可以执行类似的操作:
public bool IsDefined(int value){
var values = Enum.GetValues(typeof(SomeTypes)).Cast<int>().OrderBy(x => x);

return values.Contains(value);
}

关于c# - 检查值是否在枚举范围内而不使用 IsDefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27059797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com