Unassigned local Variable



  • Vielen Dank für die Antworten 🙂 Dann schau ich mir jetzt mal die Collections an.



  • Also ich habe jetzt es mit Collections probiert. Ganz am Anfang habe ich ArrayList deklariert.

    System.Collections.ArrayList intSatirBasi = new System.Collections.ArrayList();
    

    Und die Methode habe ich so geändert etwas:

    public void TextInfo()
            {
                int intStart2 = 0;
    
                while (this.richTextBox1.Text.IndexOf("\n", intStart2) != -1)
                {
                    intSatirBasi.Add(this.richTextBox1.Text.IndexOf("\n", intStart2));
                    intStart2 = this.richTextBox1.Text.IndexOf("\n", intStart2) + 1;
                }
            }
    

    Aber wenn ich es beim Debug anschaue, dann ist intSatirBasi immer leer, komischer Weise wird nicht geadded. 😕



  • das kann nicht direkt selbst instanziert werden!
    Ein Interface oder besser Interface-Klasse vermacht seine Funktionalität durch Vererbung einer selbst definierten Klasse.

    Das ist ein kleiner aber feiner Unterschied und ohne viel Aufwand hier ein Beispiel was Dir diesen Sachverhalt verdeutlicht:

    using System;
    using System.Collections;
    
    namespace ConsoleApplication2
    {
    	class Class1
    	{
    		[STAThread]
    		static void Main(string[] args)
    		{
    			IntArray ints = new IntArray();
    			for(int i=0;i<=5;i++)
    			{
    				ints.Add(i);
    			}
    
    			for(int i=0;i<ints.Count;i++)
    			{
    				Console.WriteLine(ints[i]);
    			}
    			Console.ReadLine();
    		}
    	}
    
    	class IntArray : System.Collections.ArrayList
    	{
    		public IntArray()
    		{
    		}
    	}
    }
    

    Mach ein Konsolen-Projekt auf und kopier mein Gedöns was hier steht drüber.
    Es ist wirklich nur das drin was ich Dir klar machen will.

    Musst Dir noch ein paar Sachen anschauen was aber nicht schadet viel Erfolg.

    Gruss sclearscreen 🙂



  • sclearscreen schrieb:

    also guckmal wirklich genau hin wenn nötig koch Dir vorher einen starken Kaffee

    Achtung jetzt scharf gucken:

    int[] intSatirBasi;
    

    Jo was ist das für eine Arraydeklaration wenn ich der Compiler/DeinRechner
    wäre würde ich auch meckern.

    Ich nicht. Das ist die Deklaration einer Referenz auf eine Array variabler Länge. Das ist hier nicht C++.

    @Savadiv: Du musst ein Array erstellen und an diese Referenz zuweisen. Also so etwas:

    intSatirBasi = new int[20];
    


  • Du verwendest diese Arraylist auch falsch das ist ein Interface....

    ArrayList ist doch kein Interface? 😕



  • g74 schrieb:

    Du verwendest diese Arraylist auch falsch das ist ein Interface....

    ArrayList ist doch kein Interface? 😕

    Ja stimmt mein Fehler hmm 🤡 Asche auf mein Haupt das Stück Beispielcode müsste aber funktionieren.

    @Threadersteller
    Ist Quatsch was ich da geschrieben habe stände ja auch ein I
    For dem Klassennamen. War aber auch schon wieder spät.

    Also wenn Du Deine Instanz von der ArrayList-Klasse nur lokal in der Methode verwenden solltest, ist klar dann existiert die auch nur die Zeit in der die Methode ausgeführt wird. Guck mal nach ob das so ist.
    Ansonsten wenn Du mit Add was einfuegst ist das auch dort drin.



  • Wie mich g74 zurecht verbessert hat will ich Dir auch gleich ein richtigeres Beispiel geben.

    Die Vererbung in dem Beispiel geht zwar auch "aber ist mit der Kirche ums Dorf".

    using System;
    using System.Collections;
    
    namespace ConsoleApplication2
    {
    	class Class1
    	{
    		[STAThread]
    		static void Main(string[] args)
    		{
    
    			ArrayList ints = new ArrayList();
    
    			for(int j=0;j<=5;j++)
    			{
    				ints.Add(j);
    			}
    
    			for(int j=0;j<ints.Count;j++)
    			{
    				Console.WriteLine(ints[j]);
    			}
    			Console.ReadLine();
    		}
    	}
    }
    

    Zu so später Stunde hat mich wohl der Hint der Quellcode-Hilfe verwirrt:

    "class System.Collections.Arraylist
    Implementiert die System.Collections.IList-Schnittstelle unter Verwendung eines
    Arrays, das nach Bedarf dynamisch vergrössert wird
    "

    Ja passiert halt, kann ich jetzt auch nicht mehr ändern. Aber völlig in Ordnung
    das ich verbessert worden bin 😃



  • Ja, okay, ich hab alles verstanden, jedoch, irgendwas mache ich noch falsch...

    Ganz am anfang, erstelle ich ein ArrayList;

    public partial class frmAnaPencere : Form
        {
            System.Collections.ArrayList ints = new System.Collections.ArrayList();
    

    Dann habe ich eine Methode dieser Klasse;

    public void TextInfo()
            {
                int intStart2 = 0;
    
                while (this.richTextBox1.Text.IndexOf("\n", intStart2) != -1)
                {
                    //intSatirBasi.Add(this.richTextBox1.Text.IndexOf("\n", intStart2));
                    intStart2 = this.richTextBox1.Text.IndexOf("\n", intStart2) + 1;
                    ints.Add(intStart2);
                }
            }
    

    Ich krieg keinen Syntax fehler. Aber bei dieser Methode, wird einfach nichts in die ArrayList gepackt. Obwohl der Text 100% "\n" beinhaltet. 😞



  • Hast aber auch ne nette Endlosschleife gebastelt 🙂

    while (this.richTextBox1.Text.IndexOf("\n", intStart2) != -1) {
    ...
    intStart2 = this.richTextBox1.Text.IndexOf("\n", intStart2) + 1;
    
    }
    

    Wenn das Zeichen nicht mehr gefunden wird und IndexOf -1 liefert, dann addierst du ne 1 dazu und bist wieder bei 0 und hast damit wieder deinen Anfangswert und du suchst immer weiter 🙂



  • Stimmt 😃

    Aber irgendwie war das nicht das Problem, warum er nicht in die ArrayList packt. Ich hab es so probiert:

    ..
    if (this.richTextBox1.Text.IndexOf("\n", intStart2) != -1)
    {
        intStart2 = this.richTextBox1.Text.IndexOf("\n", intStart2) + 1;
    }
    ..
    

    Und noch immer ist die ArrayList leer. Und auch wenn ich eine Endlos-Schleife haben würde, dann sollte er ja troztdem beim ArrayList etwas reinpacken?

    EDIT:

    Hab jetzt sogar etwas probiert, was dies irgendwie beweist 😃

    private void TextInfo()
            {
                for (int intE = 0; intE < 10; intE++)
                {
                    ints.Add(intE);
                }
            }
    

    Ganz einfach, sollte ohne problem gehen, aber ints ist noch immer leer 😕



  • Savadiv schrieb:

    Stimmt 😃

    Und noch immer ist die ArrayList leer. Und auch wenn ich eine Endlos-Schleife haben würde, dann sollte er ja troztdem beim ArrayList etwas reinpacken?

    EDIT:

    Hab jetzt sogar etwas probiert, was dies irgendwie beweist 😃

    private void TextInfo()
            {
                for (int intE = 0; intE < 10; intE++)
                {
                    ints.Add(intE);
                }
            }
    

    Ganz einfach, sollte ohne problem gehen, aber ints ist noch immer leer 😕

    Das glaube ich Dir nicht es sei den Du hast irgendwo in Deinem GUI-Projekt
    eine Methode die nebenläufig Dein ArrayList wieder leermacht!
    Oder Du verstehst unter leer was anderes als ich.

    Wie wärs wenn Du die Arraylist erstmal in einem Konsolenprojekt austestest.
    Dein obiger Code macht genau Zahlen von 0-9 rein.

    Zieh ein Label auf Dein GUI und mach folgendes dann siehst Du das die Add-Methode kein Fake ist.

    private void TextInfo()
            {
                for (int intE = 0; intE < 10; intE++)
                {
                    ints.Add(intE);
                }
    
                for (int intF = 0; intF < ints.Count; intF++)
                {
                   MessageBox.Show(ints[intF].ToString()));
                }
            }
    

Anmelden zum Antworten