Fiddler 的 HTTPHeaders 类有一个成员Storage
,它是一个List<HTTPHeaderItem>
.
HTTPHeaders 类因此以 .NET 1.1 样式公开了一个枚举器:public System.Collections.IEnumerator GetEnumerator()
. 此方法仅返回Storage.GetEnumerator()
.
问题:
不实施是否会造成性能损失
IEnumerable<HTTPHeaderItem>
?或者编译是否foreach(HTTPHeaderItem in oHTTPHeaders)
足够聪明,可以识别出它返回的对象也实现了 IEnumerable 的特定类型版本并避免了一堆强制转换?是否甚至可以在
IEnumerable<HTTPHeaderItem>
不隐藏(通过显式接口实现)旧 GetEnumerator() 方法的情况下实现?隐藏旧方法会破坏与旧扩展的二进制兼容性(例如Method not found: 'System.Collections.IEnumerator Fiddler.HTTPHeaders.GetEnumerator()
'.)
结果
*正如下面 Servy 的回答所指出的,在添加返回类型专用枚举器的公共 GetEnumerable() 时,没有简单的方法可以避免破坏二进制兼容性。
但是,在我的特定情况下,我有点幸运。HTTPHeaders 是一个基类,几乎所有调用者都使用两个派生类(HTTPRequestHeaders 和 HTTPResponseHeaders)之一。我已经为每个派生类添加了公共通用 GetEnumerator() 方法。这些新的特定于类型的枚举器由针对新版本编译的代码调用,而尚未重新编译的旧插件仍然从基类中检索非泛型枚举器。*