我正在处理一个web服务方法,该方法将接收一个into数组作为参数,然后,在该方法内部,我将数组中的值转换为枚举值,并将它们存储在枚举列表中。但是,当传递一个不在枚举中的值时,它会毫无问题地添加到枚举列表中。没有InvalidCastException
,什么都没有。我做了一个测试项目,看起来像这样:
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
}
}
当我运行它时,输出是:
Value1
Value2
15
对于我的web服务,我将实现一个验证,所以这将永远不会发生。但是..。这太奇怪了!运行库不应该抛出InvalidCastException
或ArgumentOutOfRangeException
,或者类似的东西吗?因为我得到了一个枚举列表(而不是int值),所以我希望将值限制为枚举的值(这就是枚举的用途)。
我是不是遗漏了什么?这是一个.NET错误,一个C#错误,还是有什么我不知道的枚举?
发布于 2011-08-26 02:06:45
可以,在转换为枚举值时,不会检查已定义的值。
您可以使用IsDefined
方法检查是否定义了特定值:
if (Enum.IsDefined(typeof(TestValues), value)) ...
发布于 2011-08-26 02:04:43
您总是可以将任何int值转换为基于int的枚举。这是经过设计的,因为如果强制转换必须检查所有合法的值,那么它的速度会慢得多。
发布于 2011-08-26 02:06:41
要确定是否在enum
中定义了指定的int
,可以使用Enum.IsDefined。
Enum.IsDefined(typeof(TestValues), 15);
https://stackoverflow.com/questions/7195040
复制相似问题