gpt4 book ai didi

.NET:为什么不检查Enum的范围/值?

转载 作者:行者123 更新时间:2023-12-04 05:05:41 26 4
gpt4 key购买 nike

这一直困扰着我。也许对.NET内部知识有一定了解的人可以向我解释。

假设我将枚举定义如下:

public enum Foo
{
Eenie = 1,
Meenie = 2,
Miney = 3,
Moe = 4
}

现在,还假设我的代码中有以下代码:
int bar = (Foo)5;

即使值5显然不是 Foo中定义的有效值,这也可以正常编译,并且不会引发任何异常。

或者,请考虑以下内容:
public void ProcessFoo(Foo theFoo)
{
// Do processing
}

public static void Main()
{
ProcessFoo((Foo)5);
}

同样,也不异常(exception)。

在我看来,这将导致类型不匹配异常,因为5不是 Foo。但是设计师选择不这样做。

现在,我编写了一个扩展方法,可以验证是否存在这种情况,并且调用它以确保确实存在这种情况没什么大不了的,但是我必须使用反射来做到这一点(包括所有的性能损失和其他问题) )。

再说一遍,有什么令人信服的原因可能会导致决定没有经过检查的枚举?

供引用,来自 the MSDN documentation for the Enum class:

When you define a method or property that takes an enumerated constant as a value, consider validating the value. The reason is that you can cast a numeric value to the enumeration type even if that numeric value is not defined in the enumeration.

最佳答案

问题是性能。对正常枚举(例如颜色)进行检查的枚举非常简单

enum Color {
Red,
Blue
}

但是,问题在于用作位标志的枚举。
enum Property {
IsFirst = 0x1,
IsDefault = 0x2,
IsLastAccessed = 0x4
}

认为必须对转换为Enum值的每个单个整数进行按位检查,这被认为太昂贵了。因此轻松地转换为枚举值。

关于.NET:为什么不检查Enum的范围/值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/432937/

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