3 Stimmen

C# ArrayList - Objekt

Ich habe drei Klassen in meinem C#-Programm. Erhalten Sie den folgenden Fehler:

Kann t nicht implizit konvertieren Register_Employee.Employee' konvertiert werden. Es gibt eine explizite Konvertierung (fehlt Ihnen fehlt ein Cast?) C:\Users\x64\Documents\Visual S 2010 \Projects\Register Mitarbeiter \Register Mitarbeiter \EmployeeList.cs 20 20 Register Mitarbeiter

Ich weiß, was das Problem ist. Sie müssen den richtigen Objekttyp zurückgeben, aber ich weiß nicht, wie ich das Problem lösen kann. Ich habe eine Klasse Employee, eine Klasse EmployeeList, die Mitarbeiter enthält, und das Hauptprogramm.

namespace Register_Employee
{
    class EmployeeList
    {
        ArrayList list = new ArrayList();

       public void addEmployee(Employee a)
       {
           this.list.Add(a);
       }

        public Employee GetEmployee(int Index)
        {
            var e = list[Index]; <<<<<The problems
            return e;  <<<<<The problems
        }

    }
}

namespace Register_Employee
{
    class Employee
    {

        public Employee(String iD, String firstName, String lastName)
        {
            this.ID = iD;
            this.FirstName = firstName;
            this.LastName = lastName;
        }

        public String ID { get; set; }
        public String FirstName { get; set; }
        public String LastName { get; set; }

    }
}

Vielen Dank im Voraus

4voto

Strillo Punkte 2942

Wie die Fehlermeldung sagt, müssen Sie explizit casten:

Employee e = (Employee)list[Index];

Sie könnten auch eine List<Employee> anstelle von ArrayList.

3voto

Amar Palsapure Punkte 9472

Sie müssen cast eingeben object a Employee Objekt

public Employee GetEmployee(int Index)
{
    var e = list[Index]; 
    return (Employee)e;  
}

.Net Framework 2.0 oder höher hat eine generische Klasse List die Sie anstelle von ArrayList . Repräsentiert eine stark typisiert Liste der Objekte, auf die über den Index zugegriffen werden kann. Prüfung auf MSDN .

In diesem Fall

class EmployeeList
{
    List<Employee> list = new List<Employee>();
    //Rest of your code
}

Ich hoffe, das hilft Ihnen.

3voto

rerun Punkte 24318

Sie können das Problem auf verschiedene Weise lösen.

Erstens, wenn eine Sache als Objekt gespeichert wird, aber eigentlich ein abgeleiteter Typ ist, können Sie sie immer in den entsprechenden Typ umwandeln.

public Employee GetEmployee(int Index)
    {
        var e = list[Index]; 
        return (Employee)e; 
    }

Allerdings verlieren Sie dabei die Typensicherheit. Eine bessere Lösung ist die Verwendung von Generika

class EmployeeList
{
   List<Employee> list = new List<Employee>();

   public void addEmployee(Employee a)
   {
       this.list.Add(a);
   }

    public Employee GetEmployee(int Index)
    {
        var e = list[Index]; 
        return e;  //No cast needed 
    }

}

In diesem Fall wissen Sie, haben eine Liste, die Typsicherheit unterstützt (dh Sie wissen, alles in ihm ist ein Mitarbeiter) und wird tatsächlich aus der Array-Liste durchführen.

2voto

Henk Holterman Punkte 249753

Verwenden Sie einfach

public Employee GetEmployee(int Index)
{
  var e = list[Index];  // should work, e will be of type Object
  return (Employee) e; // <<<<<The problems
}

Und erwägen Sie die Verwendung von List<Employee> um eine "typensichere" Sammlung zu haben.

class EmployeeList
{
    //ArrayList list = new ArrayList();
    List<Employee> list = new List<Employee>();
    ...
}

2voto

Not-RocketScience Punkte 162

Das Objekt wird in den Employee Objekt. Verwenden Sie Liste, wenn Sie die Möglichkeit dazu haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X