Laden...

[Anfänger] string aus einer Arraylist Collection auslesen?

Erstellt von 4breeze.com vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.223 Views
4breeze.com Themenstarter:in
17 Beiträge seit 2006
vor 17 Jahren
[Anfänger] string aus einer Arraylist Collection auslesen?

Hi 😉

hier mal meine Collection:


namespace FoldersAndFiles
{
    public class GUILoader
    {
        public ArrayList GetFoldersAndFiles(string folderPhat)
        {
            ArrayList arrListIO = new ArrayList();
            DirectoryInfo dirInfo = new DirectoryInfo(folderPhat);

            foreach (DirectoryInfo dI in dirInfo.GetDirectories())
            {
                Dateien newDateien = new Dateien();
                newDateien.OrdnerName = dI.Name.Substring(4, dI.Name.Length -4);
                newDateien.OrdnerUrl = dI.Name;
                foreach (FileInfo fi in dI.GetFiles())
                {
                    TabDaten newTabDaten = new TabDaten();
                    newTabDaten.TabName = fi.Name.Substring(4, fi.Name.Length - 8);
                    newTabDaten.TabUrl = fi.Name;

                    newDateien.TabInfo.Add(newTabDaten);
                    
                }

                arrListIO.Add(newDateien);
            }

            return arrListIO;
        }
    }

    public class Dateien
    {

        public string OrdnerName;
        public string OrdnerUrl;

        public ArrayList TabInfo = new ArrayList();
    }

    public class TabDaten
    {
        public string TabName;
        public string TabUrl;
    }
}

hier der code im mainform:


        private void Form1_Load(object sender, EventArgs e)
        {

            GUILoader GUILoad = new GUILoader();
            ArrayList arrListIO = GUILoad.GetFoldersAndFiles("data");


            for (int i = 0; i <= arrListIO.Count; i++)
            {
                Button navButton = new Button();
            //    navButton.Text = arrListIO[0]???;     //Wie komme ich da zu meinem OrdnerName?

            }

        }

Möchte die einzelnen Inhalte aus der Arraylist auslesen, weiß aber die Syntax nicht 😦

vl kann mir da wer helfen?

hier noch die komplette solution zum download:
http://members.inode.at/perhofer/_forumsupload/geoNote.zip

N
19 Beiträge seit 2005
vor 17 Jahren

Hi,

da eine Arraylist intern nur Objecte speichert, musst du das object casten.

for (int i = 0; i <= arrListIO.Count; i++)
            {
                
                Button navButton = new Button();
                navButton.Text = (Dateien)arrListIO[0].OrdnerName;     //So kommste dran...
            }

Falls die Reihenfolge nicht ausschlaggebend ist, würde ich anstatt der for Schleife eine foreach nehmen, die dann direkt castet.

foreach (Dateien DateiObjekt in arrListIO)
{
   Button navButton = new Button();
   navButton.Text = DateiObject.OrdnerName;

  // hier Zugriff auf TabInfo
  foreach (TabDaten TabDatenObject in DateiObject.OrdnerName)
  {
     TabDatenObject.TabName="Tu mit mir was du willst...";
  }
}

Wenn du die erste Version nehmen willst, kannste die ja auch ne Objectreferenz auf das gecastete Element legen, damit du leichter drauf zugreifen kannst.

Hoffe das hilft,

Gruß Marco

4breeze.com Themenstarter:in
17 Beiträge seit 2006
vor 17 Jahren

Hallo Marco

besten dank für deine Hilfe, aber irgend was mach ich noch immer Falsch 😦

navButton.Text = (Dateien)arrListIO[0].OrdnerName;

bei "OrdnerName" meldet sich VS immer mit "object does not contain a definition for OrdnerName"

vielleicht lässt sich hier ja wer finden, der meine Solution Dateien runterlädt und mal ausprobiert 🙂

C
151 Beiträge seit 2006
vor 17 Jahren

((Dateien)arrListIO[0]).OrdnerName;

187 Beiträge seit 2005
vor 17 Jahren

Hallo 4breeze,

Der unterschied zwischen deinem Cast Versuch und dem von can320 ist folgender.

Du versucht das Objekt in der Eigenschaft OrdnerName der Klasse Objekt in die Klasse Dateien zu casten. Da die Klasse Objekt die Eigenschaft OrdnerName nicht hat wird das nicht gehen.

can320 klammert explizit ein, was gecastet werden soll. er castet das Objekt, dass sich in der Arraylist arrListIO an der ersten stelle befindet und fragt dann die Eigenschaft OrdnerName ab.

mfg

4breeze.com Themenstarter:in
17 Beiträge seit 2006
vor 17 Jahren

Hey super, Ihr seid die besten 😉

Besten dank!

Dann auch schon mal ein frohes neues Jahr, falls wir uns nicht mehr schreiben^^

mfg george

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo 4breeze.com,

verwende statt ArrayList besser List<String>.

herbivore

N
19 Beiträge seit 2005
vor 17 Jahren

hehe, herbi, ich glaub du hast nur die Überschrift gelesen :p

Und ja sorry wegen dem Cast, habs einfach hier reingetippt und den syntaxfehler übersehen..

viel Spaß

4breeze.com Themenstarter:in
17 Beiträge seit 2006
vor 17 Jahren

komme mit dem casten noch immer nicht klar 😦**


private void Form1_Load(object sender, EventArgs e)
        {

            GUILoader GUILoad = new GUILoader();
            ArrayList arrListIO = GUILoad.GetFoldersAndFiles("data");


            dummy1 = ((Dateien)arrListIO[0]).((TabDaten)TabInfo[0]).TabName;    // geht nicht...
            

             //Wie komme ich zu meiner verschachtelten ArrayList (TabInfo) in der obigen Collection? (Beitrag 1)


        }

gruß george, danke

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo 4breeze.com,

"geht nicht" ist immer eine schlechte Fehlerbeschreibung. Die Fehlermeldung sagt doch genau, was in was gecastet werden soll (und damit was eben nicht geht). Daraus kannst du ableiten, was du ändern musst, um den Fehler zu beheben. Außerdem könntest du die Anweisung in mehrere weniger komplexe Anweisungen aufteilen. Auch dadurch wird es leichter den Fehler zu finden.

Außerdem sind diese Probleme beim Casten genau der Grund, weshalb es besser ist, typsichere Collections zu verwenden (es gibt natürlich auch Umstände, die einen zwingen nicht typsichere Collections zu verwenden).

Siehe auch Syntaxfehler selbst lösen (Compilerfehlermeldungen)

herbivore

4breeze.com Themenstarter:in
17 Beiträge seit 2006
vor 17 Jahren

So gehts schon mal:


foreach (TabDaten TabObjekt in ((Dateien)arrListIO[0]).TabInfo)
            {
                tabPage1.Text = TabObjekt.TabName;
            }

nur direkt komme ich noch nicht ran:
tabPage1.Text = ((TabDaten)arrListIO[0]).TabName;

Da kommt dann eine "InvaliedCastException was unhandled" Laufzeit Exception mit dem Hinweis:
Das Objekt des Typs FoldersAndFiles.Dateien kann nicht in Typ FoldersAndFiles.TabDaten umgewandelt werden.

😦

N
19 Beiträge seit 2005
vor 17 Jahren

dummy1 = ((Dateien)arrListIO[0]).((TabDaten)TabInfo[0]).TabName;

also wenn das funzt, sorry ich habs nun nicht ausprobiert, dann so:

dummy1 = (TabDaten)(((Dateien)arrListIO[0]).TabInfo[0]).TabName;

Aber wie gesagt, nicht getestet und es ist späääät :p

4breeze.com Themenstarter:in
17 Beiträge seit 2006
vor 17 Jahren

dummy1 = (TabDaten)(((Dateien)arrListIO[0]).TabInfo[0]).TabName;

'object' does not contain a definition for 'TabName'

leider, währe ja fast zu schön 😕

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo 4breeze.com,

eigentlich ist casten doch ganz einfach:

(ZielTyp)(AusdruckVomQuellTyp)

Ich denke du musst das nur konsequent anwenden und immer richtíg klammern. Außerdem muss sich QuellTyp überhaupt in ZielTyp konvertieren lassen.

herbivore