Необязательный параметр в индексаторе - требуется ссылка на объект ошибка

В моем классе OverloadedIndexer у меня есть поле закрытого массива с именем stringData, размер которого задается в конструкторе класса. Я хочу создать индексатор с необязательным параметром. Его значение по умолчанию должно быть количеством элементов в этом массиве.

К сожалению, строка кода внизу этого поста вызывает следующую ошибку времени компиляции:

Для нестатического поля, метода или свойства "OverloadedIndexer.stringData" требуется ссылка на объект

public string this[string data, int maxOccurences = stringData.Length]

Есть ли способ заставить его работать?


person Kapol    schedule 14.12.2013    source источник


Ответы (2)


Значения по умолчанию должны быть константами — вы не можете указать значение, которое зависит от другой переменной. Так что это было бы хорошо:

public string this[string data, int maxOccurences = 0]

но то, что у вас есть, недействительно. По общему признанию, сообщение об ошибке, которое вы получаете, вызвано несколько иной причиной, но даже если бы вы могли обойти это, вы столкнулись бы с проблемой константности.

person Jon Skeet    schedule 14.12.2013
comment
Ах, хорошо. Я заставил его работать, создав постоянное поле, равное Int32.MaxValue, и установив его в качестве значения параметра по умолчанию. - person Kapol; 15.12.2013

см. msdn Именованные и необязательные аргументы

Каждый необязательный параметр имеет значение по умолчанию как часть его определения. Если для этого параметра не отправляется аргумент, используется значение по умолчанию. Значение по умолчанию должно быть одним из следующих типов выражений:

  • постоянное выражение;
  • выражение вида new ValType(), где ValType — тип значения, такой как перечисление или структура;
  • выражение вида default(ValType), где ValType — тип значения.
person Grundy    schedule 14.12.2013