c# - 为什么 System.Net.Http.HttpMethod 是一个类,而不是一个结构?

标签 c# asp.net-core .net-core .net-standard

之前有一个问题与 .Net 标准的 System.Net 中的一个实现点有关,关于为什么 HttpMethod 仍然不是一个枚举。

Why is System.Net.Http.HttpMethod a class, not an enum?

它对可扩展性有很好的回答。

但是,正如我在标题中所说,为什么它不是一个结构体?

It seems to pass all the tests according to microsofts guidelines?这是一些信息,在 Web 应用程序中被大量抛出,我“认为”DELETE 是最长的动词,低于推荐的 16 个字节。

这与字符串作为 .Net 中的中转站有关吗?我知道 yield 可能微不足道,但我只是想更好地理解。

最佳答案

与类相比,结构不会有太多优势。

结构非常适合 memcpy/memcmp 类型的实现,而对于 HttpMethod 则没有必要。

如果您查看 .net 核心实现 https://github.com/dotnet/corefx/blob/master/src/System.Net.Http/src/System/Net/Http/HttpMethod.cs您会看到它使用引用相等性检查来比较实例,这比字符串比较稍快。对于结构,这是不可能的...因为大多数结构实例实际上是不同的实例,它们必须比较字符串值。

鉴于 HTTP 方法字符串值不是很长,这里的结构实际上没有其他好处,因为它只携带一个字符串引用,并且大多数 HttpMethod 实例将成为 HttpMethod 类的静态字段的实例。

它也可以是一个纯字符串,但它不会在编译等过程中帮助方法解析。

关于c# - 为什么 System.Net.Http.HttpMethod 是一个类,而不是一个结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54554685/

相关文章:

c# - 业务逻辑或 DAL 返回类型的 IEnumerable 与 IQueryable

c# - Orchard 查询连接实体

c# - 如何在错误 JSON 的反序列化过程中忽略异常?

sql-server - Entity Framework : Created a entity and insert data in table without primary key

c# - 验证.net核心中单例内部 transient 的范围?

c# - .Net Framework dll 不适用于 .Net Standard 项目

windows - .NET Core消息队列解决方案

c# - 如何在文本框中绑定(bind) gridview 以及如何在 asp.net 中计算总值

c# - 正确处理两个 WebException

c# - 无法对 ASP.NET Core 中的 SOAP 服务进行身份验证