首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么访问枚举定义中不存在的枚举成员(通过转换整数)不会给出错误

为什么访问枚举定义中不存在的枚举成员(通过转换整数)不会给出错误
EN

Stack Overflow用户
提问于 2018-10-25 03:45:40
回答 1查看 203关注 0票数 6

要修复应用程序中的错误,我必须设置在System.Net程序集中找到的ServicePointManager类的SecurityProtocolType,如下所示:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

在.Net 4.5+中,SecurityProtocolType枚举有四个成员:

public enum SecurityProtocolType
{
    Ssl3 48,    
    Tls 192,    
    Tls11 768,  
    Tls12 3072
}

但是,在.Net 4.0中,SecurityProtocolType枚举只有两个成员:

public enum SecurityProtocolType
{
    Ssl3 48,    
    Tls 192
}

由于我的代码中的另一个项目也需要相同的修复,但该项目在.Net 4.0上,该项目没有Tls12作为枚举的成员,因此this answer建议了以下解决方法(假设我在同一计算机上安装了.Net 4.5 ):

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

也许我明显错过了平滑的东西,但我的问题是,当3072不是.Net 4.0中枚举的有效值时,(SecurityProtocolType)3072如何解析为Tls12。我想知道幕后到底发生了什么让这件事变得有效的魔法。

EN

回答 1

Stack Overflow用户

发布于 2018-10-25 03:54:40

来自C#中枚举的文档(MSDN)

可以为类型为Day的变量赋值基础类型范围内的任何值;这些值不限于命名常量。

所以代码的编译肯定是没有问题的。此外:

与任何常量一样,对枚举的各个值的所有引用都会在编译时转换为数字文字。这可能会产生潜在的版本控制问题,如常量中所述。

将其他值分配给新版本的枚举,或者更改新版本中枚举成员的值,都会导致相关源代码出现问题。

您实际上是在利用这一点。运行在.NET 4.0上的框架不知道如何处理3072值,但.NET 4.5框架知道。您只是没有方便的快捷方式(枚举)来获取该值。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52976839

复制
相关文章

相似问题

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