之前有一个问题与 .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/