WebHeaderCollection,按索引访问

时间:2012-01-17 14:06:08

标签: c# .net-2.0

使用以下代码,都会导致编译错误(.net 2):

var headers = new WebHeaderCollection();
var a = headers[0];
var b = headers[(int)0];
const int FIRST_HEADER = 0;
var c = headers[FIRST_HEADER];

全部失败:以下方法或属性之间的调用不明确:'System.Net.WebHeaderCollection.this [System.Net.HttpRequestHeader]'和'System.Net.WebHeaderCollection.this [System.Net.HttpResponseHeader] ”。

我可以在某种程度上理解为什么(a)会失败,因为重载接受HttpRequestHeader / HttpResponseHeader枚举;但是(b)和(c)被隐式地转换为int类型。

以下作品:

var headers = new WebHeaderCollection();
int index = 0;
var d = headers[index];

我在编写一些测试时遇到过这种情况,并且需要能够证明添加了预期的标题(在我的场景中总是唯一的!)

为什么我必须声明int类型的变量才能使用此重载?

1 个答案:

答案 0 :(得分:1)

在所有情况下,表达式被视为“值为零的常量表达式” - 可隐式转换为任何枚举类型。

您之后的代码有效,因为您实际上已经失去了常量,因此会删除隐式转换。

事实上,C#编译器中存在一个错误,这意味着它将任何常量表达式视为零值,而不仅仅是整数值,因为它可以转换为任何枚举类型 - 所以这也适用,但不应该:

HttpRequestHeader weird = 0.0;