Zugriff auf Arraylist aus andere Klasse schlägt fehl

exphertle

Grünschnabel
Guten Morgen,

ich hab mal wieder ein sehr seltsames Problem / Fehler.
Und zwar:
Ich habe in der Klasse A ein ArrayList, das auch schön brav aus XML gefüllt wird.
Jetzt leg ich mir allerdings in einer Klasse B ein Objekt der Klasse A an und versuche auf das Arraylist zuzugreifen.

Ich habe es schon als Property, public, getMethode, Array und Shared versucht.

Allerdings bekomme ich dann dort immer eine Null Reference Exception. laut Debugger ist es auch leer.

Wenn ich mich aber per Debugger in den Konstruktor der Klasse A häng, da ist das Arraylist gefüllt.

Hat mir jmd eine Erklärung und am besten gleich noch ne Lösung dazu.
Klasse A
Code:
Imports System.Xml

Public Class Settings
	Private Dim m_empfaenger As ArrayList
	
	Public ReadOnly Property Empfaenger() As ArrayList
		Get
			Return m_empfaenger
		End Get
	End Property
	
	Sub New(ByVal pfad As String)
		Dim xml As New Xml.XmlDocument()
		Dim nList  As Xml.XmlNodeList
		Dim m_empfaenger As New ArrayList()
		Dim i As Integer = 0
		
		xml.Load(pfad)
		
		nList = xml.GetElementsByTagName("eMail")
		For i = 0 To nList.Count -1
			'MsgBox(nList.Item(i).InnerXml)
			m_empfaenger.Add(nList.Item(i).InnerXml.ToString)
		Next
		
	End Sub
	
End Class

Code:
Public Class MailVersand
	
	Private Dim empfaenger As Arraylist

	Sub New(ByVal name As String, ByVal faktor As Integer)
		objSettings = new Settings(System.IO.Path.Combine(Application.StartupPath, "settings.xml"))
		empfaenger = objSettings.empfaenger 'hier kommt der Fehlter
				
	End Sub
	
End Class
 
Hi.

Du darfst die Variable nicht doppelt definieren. Die Deklaration innerhalb der New Subroutine verdeckt das Klassenattribut und du initialisierst die lokale Variable.

Gruß
 
Was meinst du denn damit genau?
Ich komme aus der Java Welt und meiner Meinung nach funktioniert es da so wie ich es oben gemacht hab.
Nein, in Java ist es genau das Gleiche.
Code:
Public Class Settings
	Private Dim m_empfaenger As ArrayList ' Variable Nr. 1

	Sub New(ByVal pfad As String)
		Dim m_empfaenger As New ArrayList()  ' Variable Nr. 2
	End Sub
End Class
Die lokale Variable existiert nur innerhalb der Subroutine New und alle Änderungen / Zuweisungen wirken sich nur auf diese Variable aus.

Mach's mal so:
Code:
	Sub New(ByVal pfad As String)
		m_empfaenger = New ArrayList()
		...
	End Sub
Gruß
 
Oh man, meinst das hab ich gesehen.
Macht schon Sinn :rolleyes:

Stimmt in Java würd das auch krachen.

Ach ja mal wieder n paar Stunden in Wind geschossen.

Aber trotzdem vielen Dank.

Gruß

ExpHertle
 
Benutzt du Visual Studio? Da sollte die lokale Variable nämlich dann grün unterstrichen werden :) .
EDIT: Tut mir leid, ich hab mich geirrt, das geht nur bei Methoden :-( .
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück