То, что делает “полевой инициализатор, не может сослаться не на статические поля”, средние в C#?

data = '<html lang="en" class="">
    <head>
    <a href="https://example.com/9f40a.css" media="all" rel="stylesheet" /> link1</a>
    <a href="https://example.com/4e5fb.css" media="all" rel="stylesheet" />link2</a>
    <a href="https://example.com/5s5fb.css" media="all" rel="stylesheet" />link3</a>
   </head>
  </html>'

Вот мой пример кода HTML выше:

doc = Nokogiri::HTML(data)
doc.xpath('//@href').map(&:value)
=> [https://example.com/9f40a.css, https://example.com/4e5fb.css, https://example.com/5s5fb.css]
12
задан Anthony Mastrean 9 August 2013 в 19:29
поделиться

4 ответа

Любой инициализатор объекта, используемый вне конструктора, должен ссылаться на статические члены, поскольку экземпляр не был создан до запуска конструктора, а прямая инициализация переменной концептуально происходит до запуска любого конструктора. getUserName - это метод экземпляра, но содержащий его экземпляр недоступен.

Чтобы исправить это, попробуйте поместить инициализатор usernameDict внутри конструктора.

15
ответ дан 2 December 2019 в 06:09
поделиться

Ссылки ниже могут пролить свет на то, почему выполнение того, что вы пытаетесь сделать, может быть не таким хорошим, в частности, вторая ссылка:

Почему инициализаторы выполняются наоборот Заказать как конструкторы? Часть первая

Почему инициализаторы выполняются в обратном порядке как конструкторы? Часть вторая

8
ответ дан 2 December 2019 в 06:09
поделиться

getUserName - это метод экземпляра.
Измените его на статический, это может сработать.

ИЛИ

Инициализировать словарь в конструкторе.

1
ответ дан 2 December 2019 в 06:09
поделиться

Вы не можете этого сделать, потому что экземпляр должен быть инициализирован, прежде чем вы сможете получить доступ к свойствам его класса. Инициализаторы полей вызываются перед инициализацией класса.

Если вы хотите инициализировать поле usernameDict с возвращаемым значением GetUserName-Method, вы должны сделать это в конструкторе или сделать этот метод статическим.

1
ответ дан 2 December 2019 в 06:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: