Поле c # никогда не назначается и всегда имеет значение null по умолчанию [duplicate]

Если это была проблема с пространством имен, есть возможность попытаться изменить две вещи в файле xslt:

  • добавить определение «моего» пространства имен в xsl: tagheet tag
  • использовать префикс «my:» при вызове элементов при перемещении xml-файла.

result

  & lt; xsl: stylesheet version =  1.0 "xmlns: xsl =" http://www.w3.org/1999/XSL/Transform "xmlns: xs =" http://www.w3.org/2001/XMLSchema "xmlns: my =" http: /  /www.w3.org/2001/XMLSchema">  & lt; xsl: template match = "/" & gt;  & lt; soap: Envelope xsl: version = "1.0" xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns: xsd = "http://www.w3.org/2001/  XMLSchema "xmlns: soap =" http://schemas.xmlsoap.org/soap/envelope/ "& gt;  & Lt; мыло: Тело & GT;  & lt; NewRoot xmlns = "http://wherever.com" & gt;  & Lt; NewChild & GT;  & Lt; ChildID & GT; ABCD & л; / ChildID & GT;  & Lt; ChildData & GT;  & lt; xsl: значение - select = "/ my: MyRoot / my: MyChild1 / my: MyData" / & gt;  & Lt; / ChildData & GT;  & Lt; / NewChild & GT;  & Lt; / NewRoot & GT;  & Lt; / мыло: Тело & GT;  & Lt; / мыло: Конверт & GT;  & Lt; / XSL: шаблон & GT;  & Lt; / XSL: стилей & GT;   
5
задан Matteo Italia 27 January 2011 в 00:07
поделиться

4 ответа

Компилятор предупреждает вас, что quantit никогда не инициализируется и всегда будет null .

Вероятно, вы должны инициализировать его экземпляром класс, который происходит из ImageManipulation.Quantizer (вы не можете создать экземпляр Quantizer , потому что это абстрактный класс):

  private static Quantizer quantit = new QuantizerImplementation ();   
6
ответ дан Frédéric Hamidi 15 August 2018 в 20:10
поделиться

Доступ к статическим элементам осуществляется через имя типа, т. е.

  Quantization.quantit = {некоторое значение};   

Конечно, поскольку он является частным, вам нужно было бы это сделать изнутри типа, и в этом случае вы можете просто использовать:

  quantit = {some  стоимость};   

Однако я бы также поставил вопрос, является ли статический параметр подходящим здесь, особенно если вы выполняете какую-либо нить (или веб-код). Статический часто злоупотребляют (и используются ненадлежащим образом).

2
ответ дан Marc Gravell 15 August 2018 в 20:10
поделиться
  • 1
    +1 для "Статический часто используется слишком часто" – Homam 27 January 2011 в 00:15

Вы никогда не назначаете экземпляр класса Quantizer вашей статической переменной quantit , поэтому он останется ссылкой null и будет генерировать это исключение, когда вы попытаетесь использовать один из его методов. Чтобы устранить проблему, просто инициализируйте этот элемент с помощью нового объекта Quantizer перед его использованием.

Кстати, я не уверен, что вы хотите, чтобы эта переменная была static .

Edit

Я только что увидел, что Quantizer является абстрактным классом ... тогда вы не можете его инстанцировать напрямую, у вас есть first , чтобы извлечь свой конкретный класс из него, реализуя методы abstract (а именно QuantizePixel и GetPalette ) или используйте другой готовый класс, полученный из Quantizer , а затем инициализирует поле quantit новым экземпляром такого класса.

3
ответ дан Matteo Italia 15 August 2018 в 20:10
поделиться
  • 1
    Он не может создать экземпляр таким образом, потому что квантификатор является абстрактным классом. – Adrian 27 January 2011 в 00:12
  • 2
    @antonlavey: Я видел это, пока вы делали комментарий, он должен быть исправлен. – Matteo Italia 27 January 2011 в 00:14
  • 3
    upvoted для коррекции (= (поэтому переключается вниз на верхнюю сторону) – Adrian 27 January 2011 в 00:23
  • 4
    @antonlavey: спасибо :) – Matteo Italia 27 January 2011 в 00:24

Статическое поле - это просто поле, значение которого разделяется всеми. Подумайте об этом как о глобальной переменной. Дело в том, что вам все равно нужно создать экземпляр, по крайней мере, один раз. Обычно это делается в одно и то же время / место, чем декларация.

  public static Quantizer quantit = new Quantizer (?);   

Я мало знаю о том, что вы хотите сделать, но я не думаю, что вы действительно хотите использовать статическое поле здесь. Я предполагаю, что вы хотите создать / создать новый экземпляр Quantizer на основе некоторого входного параметра (singlePass или doublePass). Если класс Quantizer не имеет состояния, вы должны сделать его одиночным. Если вы захотите сделать это, я предлагаю вам посмотреть контейнеры Dependency Injection, такие как Castle Windsor, которые могут легко справиться с этим для вас.

2
ответ дан yorah 15 August 2018 в 20:10
поделиться
Другие вопросы по тегам:

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