首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >接受错误值的C#枚举数组

接受错误值的C#枚举数组
EN

Stack Overflow用户
提问于 2011-08-26 02:00:42
回答 4查看 2.2K关注 0票数 19

我正在处理一个web服务方法,该方法将接收一个into数组作为参数,然后,在该方法内部,我将数组中的值转换为枚举值,并将它们存储在枚举列表中。但是,当传递一个不在枚举中的值时,它会毫无问题地添加到枚举列表中。没有InvalidCastException,什么都没有。我做了一个测试项目,看起来像这样:

代码语言:javascript
复制
static class Program
{
    static void Main(string[] args)
    {
        List<TestValues> values = new List<TestValues>() {
            TestValues.Value1,
            TestValues.Value2,
            (TestValues)15
        };

        foreach (var val in values)
            Console.WriteLine(val);

        Console.Read();
    }

    enum TestValues
    { 
        Value1 = 2,
        Value2 = 4,
        Value3 = 8
    }
}

当我运行它时,输出是:

代码语言:javascript
复制
Value1
Value2
15

对于我的web服务,我将实现一个验证,所以这将永远不会发生。但是..。这太奇怪了!运行库不应该抛出InvalidCastExceptionArgumentOutOfRangeException,或者类似的东西吗?因为我得到了一个枚举列表(而不是int值),所以我希望将值限制为枚举的值(这就是枚举的用途)。

我是不是遗漏了什么?这是一个.NET错误,一个C#错误,还是有什么我不知道的枚举?

EN

回答 4

Stack Overflow用户

发布于 2011-08-26 02:06:45

可以,在转换为枚举值时,不会检查已定义的值。

您可以使用IsDefined方法检查是否定义了特定值:

代码语言:javascript
复制
if (Enum.IsDefined(typeof(TestValues), value)) ...
票数 6
EN

Stack Overflow用户

发布于 2011-08-26 02:04:43

您总是可以将任何int值转换为基于int的枚举。这是经过设计的,因为如果强制转换必须检查所有合法的值,那么它的速度会慢得多。

票数 1
EN

Stack Overflow用户

发布于 2011-08-26 02:06:41

要确定是否在enum中定义了指定的int,可以使用Enum.IsDefined

代码语言:javascript
复制
Enum.IsDefined(typeof(TestValues), 15);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7195040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档