vb, net свойство моей коллекции в моем классе выдает ошибку

#vb.net #collections #properties

#vb.net #Коллекции #свойства

Вопрос:

Я изучаю коллекции, у меня есть класс Person

 Imports System
Imports System.Collections.Generic
Imports System.Text

Public Class Person
    Public Sub New()

    End Sub

Public Sub New(ByVal id As Integer, ByVal first_name As String, ByVal mid_name As String, ByVal last_name As String, ByVal age As Short, ByVal sex As Char)
    Me.p_id = id
    Me.first_name = first_name
    Me.mid_name = mid_name
    Me.last_name = last_name
    Me.p_age = age
    Me.p_sex = sex
End Sub

Private p_id As Integer = -1
Private first_name As String = String.Empty
Private mid_name As String = String.Empty
Private last_name As String = String.Empty
Private p_age As Short = 0
Private p_sex As Nullable(Of Char) = Nothing

Public Property ID() As Integer
    Get
        Return p_id
    End Get
    Set(ByVal value As Integer)
        p_id = value
    End Set
End Property

Public Property FirstName() As String
    Get
        Return first_name
    End Get
    Set(ByVal value As String)
        first_name = value
    End Set
End Property

Public Property MiddleName() As String
    Get
        Return mid_name
    End Get
    Set(ByVal value As String)
        mid_name = value
    End Set
End Property

Public Property LastName() As String
    Get
        Return last_name
    End Get
    Set(ByVal value As String)
        last_name = value
    End Set
End Property

Public Property Age() As Short
    Get
        Return p_age
    End Get
    Set(ByVal value As Short)
        p_age = value
    End Set
End Property

Public Property Sex() As Nullable(Of Char)
    Get
        Return p_sex
    End Get
    Set(ByVal value As Nullable(Of Char))
        p_sex = value
    End Set
End Property
End Class
 

и класс Employee, в котором я определяю свойство Person

 Imports System
Imports System.Collections.Generic
Imports System.Text

Public Class Employee
    Public Sub New()

    End Sub

Public Sub New(ByVal id As Integer, ByVal companyName As String, ByVal office As String, colPerson As Person)
    'Me._employeeid = id
    'Me._companyName = companyName
    'Me._office = office
End Sub

Private _employeeid As Integer = -1
Private _companyName As String = String.Empty
Private _office As String = String.Empty

Public Property Empoyee_ID() As Integer
    Get
        Return _employeeid
    End Get
    Set(ByVal value As Integer)
        _employeeid = value
    End Set
End Property

Public Property CompanyName() As String
    Get
        Return _companyName
    End Get
    Set(ByVal value As String)
        _companyName = value
    End Set
End Property

Public Property Office() As String
    Get
        Return _office
    End Get
    Set(ByVal value As String)
        _office = value
    End Set
End Property

Property colPerson As List(Of Person)
End Class
 

Как я могу также заполнить класс persons

 Sub Main()
    Dim pList As List(Of Person) = New List(Of Person)()

    Dim thePerson As New List(Of Person) From
    {
        New Person With {.Age = 29, .FirstName = "John", .LastName = "Shields", .MiddleName = "", .Sex = "M", .ID = 1},
        New Person With {.Age = 34, .FirstName = "Mary", .LastName = "Matthew", .MiddleName = "L", .Sex = "F", .ID = 2},
        New Person With {.Age = 55, .FirstName = "Amber", .LastName = "Carl", .MiddleName = "P", .Sex = "M", .ID = 3},
       New Person With {.Age = 12, .FirstName = "Kathy", .LastName = "Berry", .MiddleName = "O", .Sex = "F", .ID = 4}
    }
    'pList.Add(New Person(1, "John", "", "Shields", 29, "M"c))
    'pList.Add(New Person(2, "Mary", "Matthew", "Jacobs", 35, "F"c))
    'pList.Add(New Person(3, "Amber", "Carl", "Agar", 25, "M"c))
    'pList.Add(New Person(4, "Kathy", "", "Berry", 21, "F"c))
    'pList.Add(New Person(5, "Lena", "Ashco", "Bilton", 33, "F"c))
    'pList.Add(New Person(6, "Susanne", "", "Buck", 45, "F"c))
    'pList.Add(New Person(7, "Jim", "", "Brown", 38, "M"c))
    'pList.Add(New Person(8, "Jane", "G", "Hooks", 32, "F"c))
    'pList.Add(New Person(9, "Robert", "", "", 31, "M"c))
    'pList.Add(New Person(10, "Cindy", "Preston", "Fox", 25, "F"c))
    'pList.Add(New Person(11, "Gina", "", "Austin", 27, "F"c))
    'pList.Add(New Person(12, "Joel", "David", "Benson", 33, "M"c))
    'pList.Add(New Person(13, "George", "R", "Douglas", 55, "M"c))
    'pList.Add(New Person(14, "Richard", "", "Banks", 22, "M"c))
    'pList.Add(New Person(15, "Mary", "C", "Shaw", 39, "F"c))
    '

    'loop through the list
    ' PrintOnConsole(pList, "1. --- Looping through all items in the List<T> ---")
    '
    'Filtering List(T) using a single condition - (Age > 35)
    'Dim filterOne As List(Of Person) = pList.FindAll(Function(p As Person) p.Age > 35)
    'PrintOnConsole(filterOne, "2. --- Filtering List<T> on single condition (Age > 35) ---")
    ''

    '' Filtering List(T) on multiple conditions (Age > 35 and Sex is Female)
    'Dim filterMultiple As List(Of Person) = pList.FindAll(Function(p As Person) p.Age > 35 AndAlso p.Sex = "F"c)
    'PrintOnConsole(filterMultiple, "3. --- Filtering List<T> on multiple conditions (Age > 35 and Sex is Female) ---")
    ''

    ''Sorting List(T) (Sort on FirstName)
    'Dim sortFName As List(Of Person) = pList
    'sortFName.Sort(Function(p1 As Person, p2 As Person) p1.FirstName.CompareTo(p2.FirstName))
    'PrintOnConsole(sortFName, "4. --- Sort List<T> (Sort on FirstName) ---")
    '
    'Sorting List(T) descending (Sort on LastName descending)
    'Dim sortLNameDesc As List(Of Person) = pList
    'sortLNameDesc.Sort(Function(p1 As Person, p2 As Person) p2.LastName.CompareTo(p1.LastName))
    'PrintOnConsole(sortLNameDesc, "5. --- Sort List<T> descending (Sort on LastName descending) ---")

    ''Add new List(T) to existing List(T)
    'Dim newList As List(Of Person) = New List(Of Person)()
    'newList.Add(New Person(16, "Geoff", "", "Fisher", 29, "M"c))
    'newList.Add(New Person(17, "Samantha", "Carl", "Baxer", 32, "F"c))
    'pList.AddRange(newList)
    'PrintOnConsole(pList, "6. --- Add new List<T> to existing List<> ---")

    ''Remove multiple items from List(T) based on condition (remove male employees)
    'Dim removeList As List(Of Person) = pList
    'removeList.RemoveAll(Function(p As Person) p.Sex = "M"c)
    'PrintOnConsole(removeList, "7. --- Remove multiple items from List<> based on condition ---")
    '' Create Read Only List(T)
    'Console.WriteLine("Create Read Only List<>")
    'Dim personReadOnly As IList(Of Person) = pList
    'Console.WriteLine("Before - Is List Read Only? True or False : " amp; personReadOnly.IsReadOnly)
    'personReadOnly = pList.AsReadOnly()
    'Console.WriteLine("After - Is List Read Only? True or False : " amp; personReadOnly.IsReadOnly amp; "</br>")

    '
    'Dim pList1 As New Person

    Dim emp As New List(Of Employee)
    Dim r As New Employee
    r.CompanyName = "zac"
    r.Office = "home"
    r.Empoyee_ID = 1
    'Dim pList1 = New Person(1, "John", "", "Shields", 29, "M"c)

    r.colPerson.Add(New Person(1, "John", "", "Shields", 29, "M"c))---> Gives error

    emp.Add(r)
    '
    Dim i As New Employee
    i.CompanyName = "zac1"
    i.Office = "home1"
    i.Empoyee_ID = 2

    i.colPerson.Add(New Person(3, "Amber", "Carl", "Agar", 25, "M"c))
    pList.Add(New Person(4, "Kathy", "", "Berry", 21, "F"c))
    emp.Add(i)
    '
    Dim t As New Employee
    t.CompanyName = "zac2"
    t.Office = "home2"
    t.Empoyee_ID = 2

    pList.Add(New Person(5, "Lena", "Ashco", "Bilton", 33, "F"c))
    pList.Add(New Person(6, "Susanne", "", "Buck", 45, "F"c))
    emp.Add(t)


    For Each item In emp
        'item.CompanyName = "zac"
        'item.Office = "home"

        'item.colperson.Where(Function(x) x.ID = 17)
        'Console.WriteLine("employee with person collection: " amp; item.CompanyName amp; "   " amp; item.Office amp; "    " amp; item.colperson.Where(Function(x) x.ID = 17).ToString amp; "</br>")
        Console.WriteLine("employee with person collection: " amp; item.CompanyName amp; "   " amp; item.Office amp; "</br>")
    Next
End Sub
 

Комментарии:

1. Привет, к сожалению, трудно понять, когда / где проблема, не могли бы вы предоставить нам более подробную информацию о проблеме? Скриншот сообщения об ошибке и кода, в котором оно возникло, был бы полезен.

Ответ №1:

 r.colPerson.Add(New Person(1, "John", "", "Shields", 29, "M"c))---> Gives error
 

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

 Property colPerson As New List(Of Person)
                      ^^^
 

Добавьте New директиву, чтобы убедиться, что она объявлена и инициализирована для экземпляра списка

Кроме того, пожалуйста:

  • Не ставьте «col» в именах
  • Используйте имя множественного числа для List(Of Thing) — это список персон, поэтому его следует, по крайней мере, называть People , но также, возможно, указать, что это за люди. Например, если этого сотрудника рекомендовали несколько человек, назовите его RcommendedByPeople
  • Используйте Collection в имени, только если вы пишете класс, который является коллекцией, например, Microsoft, когда они писали MatchCollection — коллекцию регулярных выражений Match
  • Будьте уверены в том, является ли свойство общедоступным, частным и т. Д

т.е.

 Public Property RcommendedByPeople As New List(Of Person)
 

Комментарии:

1. как мне получить доступ к данным во встроенном классе, я попробовал следующее, но ему это не нравится для каждого элемента в emp для каждого элемента. Консоль пользователей. WriteLine(«сотрудник с коллекцией персон: » amp; item. CompanyName amp; » » amp; item. Office amp; » » amp; item.colperson. Где(функция (x) x.ID = 17). toString amp; «</br>») Консоль. WriteLine(«сотрудник с коллекцией персон: » amp; item. CompanyName amp; » » amp; item. Консоль Office amp; «</br>»). ReadLine() Следующий Следующий

2.Довольно сложно прочитать этот комментарий, да? Они не предназначены для публикации кода.. Похоже, у вашего второго For Each есть проблема / синтаксическая ошибка. Рассмотрим For Each e In emp For Each person in e.Persons