2

ADUser から継承する ADUser と Student の 2 つのクラスを使用して、Active Directory のグループにユーザーを追加するアプリケーションに取り組んでいます。

public class ADUser
    property UserID as string
    property MemberOf as new List(Of String)
    (etc)
end class

public class Student inherits ADUser
    property subjects as new list(Of Subject) 'Subject is a class of multiple strings
end class

サブジェクト名をサブジェクト リストから MemberOf リストにコピーしようとすると、NullReferenceException (オブジェクト参照がオブジェクトのインスタンスに設定されていません) が発生します。次のコードは、me.MemberOf.Add 行でエラーを生成します。

        Function ConvertSubjectsToGroupMembership() As Boolean
        Try
            For Each s As Subject In Subjects
                Me.MemberOf.Add(String.Format("t.{0}", s.ShortName).ToString)
            Next
            Return True

        Catch ex As Exception
            Return False
        End Try
    End Function

継承についての私の理解では、 Student オブジェクトの作成時に MemberOf リストを作成する必要がありますが、そうではないようです。

任意の支援をいただければ幸いです。

編集:関数を変更して(文字列の)リストを作成し、これをMemberOfプロパティにコピーすることで、問題を回避できました:

    Function ConvertSubjectsToGroupMembership() As Boolean
    Dim SubjectShortNameList As New List(Of String)

    For Each s As Subject In Subjects
        SubjectShortNameList.Add(String.Format("t.{0}", s.ShortName).ToString)
    Next

    Try
        MemberOf = SubjectShortNameList
        Return True

    Catch ex As Exception
        Return False
    End Try
End Function

それは機能しますが、それを行うためのより良い方法があると確信しています。他の方の回答・ご意見をお待ちしております!

4

1 に答える 1

0

コード内の別の場所で MemberOf を無効にしているようです。ConvertSubjectsToGroupMembership が Student の関数であると仮定すると、コードを実行したところ、正常に機能しました。ブレークポイントを設定できるように、プロパティを展開してみてください。これにより、ヌルが導入されている場所を見つけることができます。

Public Class ADUser
    Property UserID As String
    Private _MemberOf As New List(Of String)
    Public Property MemberOF As List(Of String)
        Get
            Return _MemberOf
        End Get
        Set(ByVal value As List(Of String))
            _MemberOf = value ***'breakpoint here***
        End Set
    End Property
End Class
于 2012-09-21T12:38:23.917 に答える