Неопределенный элемент из массива [duplicate]

Ссылка NullReferenceException или Object, не установленная на экземпляр объекта, возникает, когда объект класса, который вы пытаетесь использовать, не создается. Например:

Предположим, что у вас есть класс с именем Student.

public class Student
{
    private string FirstName;
    private string LastName;
    public string GetFullName()
    {
        return FirstName + LastName;
    }
}

Теперь рассмотрим другой класс, в котором вы пытаетесь получить полное имя учащегося.

public class StudentInfo
{      
    public string GetStudentName()
    {
        Student s;
        string fullname = s.GetFullName();
        return fullname;
    }        
}

Как видно из вышеприведенного кода, оператор Student s - объявляет только переменную типа Student, обратите внимание, что класс Student не создается в этой точке. Следовательно, когда выполняется выполнение инструкции s.GetFullName (), она выкинет исключение NullReferenceException.

63
задан Mike Trpcic 6 August 2009 в 15:04
поделиться

7 ответов

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

alert($("#something\\["+id+"\\]").parent().parent().attr("id"));

См. Специальные символы в селекторах , в частности второй абзац:

Чтобы использовать любой из метасимволов ( такой как !"#$%&'()*+,./:;<=>?@[\]^``{|}~) как буквальная часть имени, он должен быть экранирован двумя обратными косыми чертами: \\. Например, элемент с id="foo.bar" может использовать селектор $("#foo\\.bar"). Спецификация CSS W3C содержит полный набор правил относительно правильных селекторов CSS . Также полезной является запись в блоге Матиаса Биненса в escape-последовательности символов CSS для идентификаторов .

88
ответ дан Rory McCrossan 31 August 2018 в 17:57
поделиться

Вы также можете сделать

$('[id="something['+id+']"]')
8
ответ дан Community 31 August 2018 в 17:57
поделиться

«Любой из метасимволов

!"#$%&'()*+,./:;<=>?@[\]^`{|}~

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

Например , элемент с id = "foo.bar", может использовать селектор

$("#foo\\.bar")

"[источник: jquery doc ], а элемент с id =" foo [ bar] "(даже если он недействителен для W3C, но распознан JQuery), можно использовать селектор

$("#foo\\[bar\\]")

(Только один asnwer, как и многие другие, но все вместе:))

3
ответ дан Elvis Ciotti 31 August 2018 в 17:57
поделиться

Вы можете избежать их с помощью \\, или вы можете сделать что-то вроде этого ...

$(document.getElementById("something[" + id + "]"))
3
ответ дан Josh Stodola 31 August 2018 в 17:57
поделиться

Квадратные скобки имеют особое значение для селекторов jQuery , специальные фильтры атрибутов.

Просто выйдите из них, и он найдет ваш элемент в порядке

$( "#something\\[" + id + "\\]" )
9
ответ дан Paolo Bergantino 31 August 2018 в 17:57
поделиться

Идентификатор не может включать квадратные скобки. Это запрещено спецификацией .

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

9
ответ дан Quentin 31 August 2018 в 17:57
поделиться
  • 1
    Спасибо за ссылку на спецификацию. Я понимаю, что они не являются достоверными идентификаторами, но Rails добавляет их для удобства в контроллер. – Mike Trpcic 6 August 2009 в 15:29
  • 2
    Не только рельсы - многие веб-приложения используют этот трюк, поскольку он позволяет обработчику формы перебирать массив через массив, а не гадать количество необязательных строк, которые были отправлены. – Bryan Agee 23 April 2013 в 01:30
  • 3
    @BryanAgee - id s не name s, а большинство библиотек обработчиков форм используют подсчет для итерации, хотя несколько элементов управления с тем же именем, а не специальные соглашения об именах или гадание. – Quentin 23 April 2013 в 05:59
  • 4
    @BryanAgee - Нет, нет. Значение атрибута name не является маркером NAME. – Quentin 23 April 2013 в 16:25
  • 5
    Начиная с HTML5 это уже не так. w3.org/TR/html5/dom.html#the-id-attribute . – Jiloc 7 September 2015 в 17:47
4
ответ дан Tim S. Van Haren 31 August 2018 в 17:57
поделиться
Другие вопросы по тегам:

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