相关疑难解决方法(0)

验证枚举值

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

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

c# validation enums

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

检查值是否在枚举范围内而不使用 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
查看次数

如何确定是否为变量分配了枚举中存在的值?

我有这个枚举:

namespace J.Enums
{
    public enum TH
    {
        Light = 0,
        Dark = 1
    }

    public static partial class Extensions
    {
        public static string Text(this TH theme)
        {
            switch (theme)
            {
                default:
                case TH.Light: return "Light";
                case TH.Dark: return "Dark";
            }
        }

        public static TH ToTheme(this string theme)
        {
            switch (theme)
            {
                default:
                case "Light": return TH.Light;
                case "Dark": return TH.Dark;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我有一个变量a,如下所示:

var a = 88;
Run Code Online (Sandbox Code Playgroud)

如何确定a的值是否为Enum的有效值?在这种情况下,不会。

c#

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

标签 统计

c# ×4

enums ×2

validation ×2

bit-manipulation ×1

enumeration ×1

flags ×1