相关疑难解决方法(0)

验证枚举值

我需要验证一个整数,以了解是否是一个有效的枚举值.

在C#中执行此操作的最佳方法是什么?

c# validation enums

65
推荐指数
7
解决办法
4万
查看次数

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

在使用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.

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

c# validation enums tryparse

52
推荐指数
2
解决办法
8115
查看次数

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

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

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?

c# enums

5
推荐指数
3
解决办法
7237
查看次数

如何有效地验证表示标记枚举的整数?

考虑FileAttributes为按位运算设计的枚举.我创建了一个系统,用户可以在其中选择一些复选框来确定文件的状态.文件可以是ReadOnlySystem.因此,该值将是5(1 ReadOnly和4 System).

如何验证整数是否为有效FileAttributes枚举?

我已经看到了这些问题,但它们并没有帮助我,因为它们不适用于bitwised(标记,组合)值.

检查整数类型是否属于枚举成员
有没有办法检查int是否是C#中的合法枚举?

c# validation flags enumeration bit-manipulation

4
推荐指数
1
解决办法
355
查看次数

标签 统计

c# ×4

enums ×3

validation ×3

bit-manipulation ×1

enumeration ×1

flags ×1

tryparse ×1