WebHeaderCollection,按索引访问
本文关键字:访问 索引 WebHeaderCollection | 更新日期: 2023-09-27 18:20:45
使用以下代码,都会导致编译错误(.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]"answers"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类型的变量才能使用此重载?
在所有情况下,表达式都被视为"值为零的常量表达式",它可以隐式转换为任何枚举类型。
您稍后的代码之所以有效,是因为您实际上正在丢失常量,因此删除了隐式转换。
事实上,C#编译器中有一个错误,这意味着它将任何值为零的常量表达式,而不仅仅是整数值,视为可转换为任何枚举类型-所以这也有效,但不应该:
HttpRequestHeader weird = 0.0;