title image


Smiley Re: Interessantes ArrayList Phänomen...
Hallo euch allen!Ich hoffe Ihr habt Weihnachten einigermaßen überstanden. Für meinen Teil gab's wieder viel zu viel zum Essen, so dass die nächsten Tage auf jeden Fall Diät angesagt ist.

...P.S.: Du musst nicht explizit von object ableiten, das wird automatisch gemacht.

Weis ich. Ich wollte es aber nur noch einmal verdeutlichen, um Fragen zu vermeiden.

Möglicherweise ist eines der Elemente in der ArrayList null, änderst Du die Liste nach dem Einfügen? Ansonsten gib mal die ganze Fehlermeldung an.

Hier kommt die gesamte Fehlermeldung im Klartext. Zugegeben, da steht nicht viel drin, aber mehr habe ich auch nicht.

"System.InvalidCastException: Die angegebene Umwandlung ist ungültig.

 at MyApp.MainForm.OnClicked(Object sender, EventArgs e) in g:\dokumente\visual studio-projekte\[...]\mainform.cs:line 724"

Nun, was passiert mit der Arraylist? Die Arraylist wird zu Beginn der Anwendung erstellt und nimmt existierende(!) Registrywerte auf. Der relevante Code sieht wie folgt aus:

public class MainForm : System.Windows.Forms.Form

{

    private readonly ArrayList m_RegValues = new ArrayList();



    public MainForm()

    {

        InitializeComponent();

        LoadRegistry();

        // ...

    }



    // ...



    private void OnClicked(object sender, System.EventArgs e)

    {

        for(inti=0; i
        {

            object o=m_RegValues[i]; // <-- geht.

            // ...

        }



        foearch (object o in m_RegValues) // <-- InvalidCastException

        {

            // ...

        }



    }



    // ...



    private void LoadRegistry()

    {

        RegistryKey regroot = RegistryKey.CurrentUser.OpenSubKey(&qout;Software\\MyApp");

        if (m_RegValues.Count>0)

            m_RegValues.Clear();

        string[] keylist = regroot.GetSubKeyNames();

        foreach(string s in keylist)

        {

            MyRegValue regvalue = new MyRegValue(regroot, s);

            if (regvalue.Value != null)

                m_RegValues.Add(regvalue);

        }

        regroot.Close();

    }

}

Die Klasse MyRegValue ist wie folgt definiert:

public class MyRegValue // : object ( Auskommentiert, damit es nicht wieder Mecker gibt ;)   )

{

    private readonly RegistryKey m_RegKey;



    public MyRegValue(RegistryKey key, string name)

    {

        m_RegKey = key.OpenSubKey(name, true);

    }



    // ...





    public object Value

    {

        get { return m_RegKey.GetValue("MyKey"); }

        set { m_RegKey.SetValue("MyKey", value); }

    }

}



Anhand dieses Codeauszugs kann ich den Fehler nicht erkennen. Vielleicht liegt das aber auch daran, dass ich C# nie richtig gelernt habe. Dennoch bin ich der Meinung, das dies - zumindest theoritisch - nicht passieren dürfte.





Was passiert sonst nocht zwischen den beiden Schleifen?

Bis jetzt noch nichts, weil das Problem schon beim ersten Mal auftrat. Ich platzierte in meinem Form eine Schaltfläche, deren Klick ein Textfeld füllen sollte, um zu sehen, ob der Code funktioniert. Wie schon in meinem ersten Post beschrieben, kann ich die Werte über Indexer abfragen, über Enumerator nicht.





Das Problem ist nicht akut, weil es mir im Prinzip egal ist, welchen Weg ich gehe. Es interessiert mich nur prinzipiell, ob der Fehler mal wieder vorm Bildschirm sitzt, oder ob es sich hier wirklich wieder um einen Akte-X Fall handelt.



Grüße und, falls ich keine Zeit mehr habe, ein gutes neues Jahr!



Michaela


Rechtschreibfehler sind geistiges Eigentum des Authors und dürfen ohne schriftliche Genehmigung weder kopiert, noch veröffentlicht werden!

 

Möchtegern-Profi: "Bei Linux gibt es wenigstens keinen BlueScreen"

Echter Profi: "Stimmt! Dort ist er schwarz und heißt Kernel-Panic!"

 



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: