gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:16:08 26 4
gpt4 key购买 nike

为了修复我的应用程序中的错误,我必须像这样设置 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回答建议了以下解决方法(前提是我在同一个盒子上安装了 .Net 4.5):

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

可能是我遗漏了明显的平滑信息,但我的问题是,当 3072 不是 .Net 4.0 中枚举的有效值时,(SecurityProtocolType)3072 如何解析为 Tls12。我想了解使这项工作成功的幕后发生了什么魔法。

最佳答案

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

A variable of type Day can be assigned any value in the range of the underlying type; the values are not limited to the named constants.

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

Just as with any constant, all references to the individual values of an enum are converted to numeric literals at compile time. This can create potential versioning issues as described in Constants.

Assigning additional values to new versions of enums, or changing the values of the enum members in a new version, can cause problems for dependent source code.

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

关于c# - 为什么访问枚举定义中不存在的枚举成员(通过转换整数)不会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52976839/

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