Поиск объекта в универсальном списке

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

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

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
14
задан Peter Mortensen 19 October 2016 в 23:03
поделиться

4 ответа

Да, это имеет все, чтобы сделать с предикатами :)

Вы хотите эти , Находят (T) метод. Необходимо передать в предикате (который является типом делегата в этом случае). То, как Вы создаете того делегата, зависит, на которой версии VB Вы используете. При использовании VB9 Вы могли бы использовать лямбда-выражение. (При использовании VB9, Вы могли бы хотеть использовать LINQ вместо Находки (T) во-первых, заметьте.) Форма лямбда-выражения была бы чем-то как:

list.Find(function(c) c.ID = 1)

я не уверен, поддерживает ли VB8 анонимные методы таким же образом, что C# 2 делает все же. Если необходимо назвать это от VB8, я буду видеть то, что я могу придумать. (Я - больше человека C# действительно :)

22
ответ дан 24 October 2019 в 05:06
поделиться

Обычно необходимо использовать предикаты:

list.Add(New Customer(1, "A"))
list.Add(New Customer(2, "B"))

Private Function HasID1(ByVal c As Customer) As Boolean
    Return (c.ID = 1)
End Function

Dim customerWithID1 As Customer = list.Find(AddressOf HasID1)

Или со встроенными методами:

Dim customerWithID1 As Customer = list.Find(Function(p) p.ID = 1)
7
ответ дан 24 October 2019 в 05:06
поделиться

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

Dim list as new list(Of Customer)

list.Add(New Customer(1,"A")

list.Add(New Customer(2,"B")

list.contains(new customer(1,"A"))

равняется методу, затем был бы похож на это

public overrides function Equals(Obj as object) as Boolean
   return Me.Id.Equals(ctype(Obj,Customer).Id
end Function

Не протестированный, но это должно быть достаточно близко.

1
ответ дан 24 October 2019 в 05:06
поделиться

При использовании.NET 3.5, это может быть сделано с LINQ  to  Объекты :

, Как к: Запросите ArrayList с LINQ

В противном случае в.NET 2.0, можно использовать Find метод списка .

идея состоит в том, что необходимо будет предоставить метод, которые возвращают true, если свойство объекта удовлетворяет определенное условие.

0
ответ дан 24 October 2019 в 05:06
поделиться
Другие вопросы по тегам:

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