C# Objekte eigener Klasse zur arraylist zufügen

Berba

Lt. Junior Grade
Registriert
Okt. 2007
Beiträge
290
Sehr geehrte Community,

das Problem ist hoffentlich schnell gelöst. Das Programm beschäftigt sich im folgenden im Plinq aber momentan liegt der fehler darin, dass meiner Arraylist "Personenliste" nicht das Objekt "Person" hinzugefügt wird, sondern nur der Text "+ [0] {WindowsFormsApplication3.Form1.Person} object {WindowsFormsApplication3.Form1.Person}
"

Ich hoffe ihr könnt mir sagen wo hier der Fehler liegt, denn momentan komme ich einfach nicht weiter.

MfG

wn9grfnm.jpg

Ergänzung ()

hier der quelltext um ihn bearbeitbar machen zu können:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Collections;

namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
public class Person
{
public string Name { get; set; }
// public string Geschlecht { get; set; }
public string Städtchen { get; set; }
}

public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{

}
private void button2_Click(object sender, EventArgs e)
{
ArrayList namenliste = new ArrayList();
ArrayList Alterliste = new ArrayList();
ArrayList Stadtliste = new ArrayList();
ArrayList Personenliste = new ArrayList();
StreamReader frauennamen = new StreamReader(@"c:\Frauennamen.txt");
string eingelesenezeile = "";
int i = 0;
while (eingelesenezeile != null)
{
eingelesenezeile = frauennamen.ReadLine();
namenliste.Add(eingelesenezeile); i++;
}
namenliste.RemoveAt(i - 1);
eingelesenezeile = "d";
frauennamen.Close();
StreamReader Städte = new StreamReader(@"c:\Städte.txt");


int k = 0;
while (eingelesenezeile != null)
{
eingelesenezeile = Städte.ReadLine();
Stadtliste.Add(eingelesenezeile); k++;
}
Stadtliste.RemoveAt(k - 1);
Städte.Close();

// for (int a = 0; a < 1; a++)
// {
// for (int b = 0; b <1; b++)
// {
Personenliste.Add(
new Person
{ Name= "hallo ",
Städtchen= "ballo"
});
// Personenliste.Add(new Person { Name = Convert.ToString(namenliste[a]), Städtchen = Convert.ToString(Stadtliste) });

// } label1.Text = Convert.ToString(Personenliste[1]);



// }
var query = from Person person in Personenliste
where person.Städtchen.Contains ("b")
select person;

foreach (Person p in query)
{ }
}
}


}
Ergänzung ()

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Collections;

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public class Person
        {
            public string Name { get; set; }
         // public string Geschlecht { get; set; }
            public string Städtchen { get; set; }
        }

        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {

        }
        private void button2_Click(object sender, EventArgs e)
        {
            ArrayList namenliste = new ArrayList();
            ArrayList Alterliste = new ArrayList();
            ArrayList Stadtliste = new ArrayList();
            ArrayList Personenliste = new ArrayList();
            StreamReader frauennamen = new StreamReader(@"c:\Frauennamen.txt");
            string eingelesenezeile = "";
            int i = 0;
            while (eingelesenezeile != null)
            {
                eingelesenezeile = frauennamen.ReadLine();
                namenliste.Add(eingelesenezeile); i++;
            }
            namenliste.RemoveAt(i - 1);
            eingelesenezeile = "d";
            frauennamen.Close();
            StreamReader Städte = new StreamReader(@"c:\Städte.txt");


            int k = 0;
            while (eingelesenezeile != null)
            {
                eingelesenezeile = Städte.ReadLine();
                Stadtliste.Add(eingelesenezeile); k++;
            }
            Stadtliste.RemoveAt(k - 1);
            Städte.Close();

         //    for (int a = 0; a < 1; a++)
         //   {
         //       for (int b = 0; b <1; b++)
         //      {
                    Personenliste.Add(
                       new Person 
                       {      Name= "hallo ",
                              Städtchen= "ballo"
                       });
              //      Personenliste.Add(new Person { Name = Convert.ToString(namenliste[a]), Städtchen = Convert.ToString(Stadtliste[b]) });

              //        } label1.Text = Convert.ToString(Personenliste[1]);
             
                
                
         //   }
            var query =     from Person person in Personenliste
                            where person.Städtchen.Contains ("b")
                            select person;

            foreach (Person p in query)
            { }
        }
    }

    
}
 
die msdn-datenbank gib mir das hier als vorlage

Code:
using System;
using System.Collections;
using System.Linq;

namespace NonGenericLINQ
{
    public class Student
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int[] Scores { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            ArrayList arrList = new ArrayList();
            arrList.Add(
                new Student
                {
                    FirstName = "Svetlana",
                    LastName = "Omelchenko",
                    Scores = new int[] { 98, 92, 81, 60 }
                });
            arrList.Add(
                new Student
                {
                    FirstName = "Claire",
                    LastName = "O’Donnell",
                    Scores = new int[] { 75, 84, 91, 39 }
                });
            arrList.Add(
                new Student
                {
                    FirstName = "Sven",
                    LastName = "Mortensen",
                    Scores = new int[] { 88, 94, 65, 91 }
                });
            arrList.Add(
                new Student
                {
                    FirstName = "Cesar",
                    LastName = "Garcia",
                    Scores = new int[] { 97, 89, 85, 82 }
                });

            var query = from Student student in arrList
                        where student.Scores[0] > 95
                        select student;

            foreach (Student s in query)
                Console.WriteLine(s.LastName + ": " + s.Scores[0]);

            // Keep the console window open in debug mode.
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }
}
/* Output: 
    Omelchenko: 98
    Garcia: 97
*/

und ich sehe keinen unterschied zu meinem programm
 
Hallo,

der Fehler liegt darin das du eine Klasse ( Person ) direkt in einen String convertierst und nicht die Variable ( Name ) der Klasse Person.

Vorallem würde ich nicht immer Convert.ToString(Personenliste[1].Name) benutzen sondern Personenliste[1].Name.ToString(); Das finde ich angenehmer und funktioniert schöner mit der Autovervollständigung ;)


LG Daniel
 
die zeile ist aber auch auskommentiert.
es steht da
Code:
Personenliste.Add(
                       new Person 
                       {      Name= "hallo ",
                              Städtchen= "ballo"
                       });


oder was meinst du ? Verzeiht bitte meine unwissendheit ;)
 
Hallo,

daran ist ja auch nichts falsch dran. Aber es geht genau um dein Auskommentiertes den damit hast du kontrolliert was für ein Inhalt du hast.

Code:
              //      Personenliste.Add(new Person { Name = Convert.ToString(namenliste[a]), Städtchen = Convert.ToString(Stadtliste[b]) });

              //        } label1.Text = Convert.ToString(Personenliste[1]);

Das hast du so auskommentiert. Mit dem Einkommentierten hast du deine Meldung bekommen die dir komisch vorkommt was daran liegt das du direkt die Klasse in einen String convertierst. Wenn du die ausgabe wie folgt schreibst:

Code:
label1.Text = Personenliste[0].Name.ToString();

solltest du die richtige ausgabe bekommen. Den deiner Personenliste wird ein Person objekt hinzugefügt.

LG Daniel
 
woher weist du denn das nur der Text "+ [0] {WindowsFormsApplication3.Form1.Person} object {WindowsFormsApplication3.Form1.Person}" hinzugefügt wird
 
Du musst die Variable Namen in den Typ String konvertieren lassen, nicht die Klasse Person.
 
na indem ich das programm zeilenweise mittels f11 durchlaufen lasse
Ergänzung ()

Code:
label1.Text = Personenliste[0].Name.ToString();
funktioniert auch nicht.
Außerdem weiß ich nicht wo genau ich die Variable in nen string wandeln soll bzw. wo ich die ganze klasse in einen string wandel.
 
ich habe es gerade bei mir aus probiert und ich weis garnicht wo dein Problem ist. Klick einfach mal auf das + und du wirst sehen das deine Person hallo aus ballo kommt.

edit wie lange arbeitest du schon mit dem VS
 
ach du scheiße....du hast ja recht

o gott ist das peinlich ;D


trotzdem vielen dank an die unterstützer

allerdings stellt sich noch die frage wie ich aus der liste auf person und name bzw. stadt zugreifen kann um es als label1.text auszugeben
Ergänzung ()

hat sich erledigt...mittels linq klappts und mehr ist nicht wichtig
kann geschlossen werden
vielen dank
 
Zuletzt bearbeitet:
Oh weia, der Code ist ja vorne und hinten miserabel. In .NET gibt es Typsichere Varianten der Listen. Belies dich mal zum Thema List<T>.
StreamReader und Writer bitte immer mit einem using ummanteln. Sonderzeichen in Variablennamen ist auch nicht gerade die feine englische Art. Du solltest dir vielleicht nochmal die Grundlagen anschauen eh du dich mit PLINQ beschäftigst :) Aber ich glaube die obigen Tips sollten dir erstmal helfen.
 
sry aber dazu wirds nicht kommen
ich hab drei tage einen crashkurs bzgl programmieren bekommen und soll nun ne seminararbeit schreiben..ich bin froh, dass es überhaupt läuft ;)

aber danke für die tips
 
Ahja das typische Halbwissen was durch sowas entsteht und somit wieder jemand auf die Programmierwelt losgelassen wird der von tuten und blasen keine Ahnung hat.
 
Zurück
Oben