WebHeaderCollection, доступ по индексу - PullRequest
0 голосов
/ 17 января 2012

при использовании следующего кода все они вызывают ошибку компиляции (.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.этот [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 Ответ

1 голос
/ 17 января 2012

Во всех случаях выражение считается «константным выражением со значением ноль» - которое неявно преобразуется в любой тип перечисления.

Ваш более поздний код работает, потому что вы фактически теряете константу.Конечно, это удаляет неявное преобразование.

На самом деле, есть ошибка в компиляторе C # вокруг этого, что означает, что он обрабатывает любое константное выражение со значением ноль, а не только целочисленные значения,как конвертируемый в любой тип перечисления - это тоже работает, но не должно:

HttpRequestHeader weird = 0.0;
...