Laden...

Eine vererbte Klasse in einer Liste finden

Erstellt von PierreDole vor 3 Jahren Letzter Beitrag vor 3 Jahren 815 Views
P
PierreDole Themenstarter:in
74 Beiträge seit 2017
vor 3 Jahren
Eine vererbte Klasse in einer Liste finden

Moin,

ich habe eine Liste mit dem Datentyp einer Base-Klasse und möchte überprüfen, ob sich ein bestimmtes vererbtes Objekt dieser Base-Klasse in der Liste befindet.

Zum Beispiel:


List<BaseTask> taskList = new List<BaseTask>();

// TaskA, TaskB und TaskC erben von BaseTask.

taskList.Add(new TaskA());
taskList.Add(new TaskB());
taskList.Add(new TaskC());

Bin da etwas ratlos und habe es wie folgt versucht:


if(taskList.Find(task => task.GetType().Name == "TaskA") != null)
// do something

Naja, es klappt nicht. Gibt es da eine andere Möglichkeit?

4.931 Beiträge seit 2008
vor 3 Jahren

Das geht am besten mit dem as- oder is-Operator, s.a. [FAQ] Casten aber richtig: () / is / as.
Oder aber du vergleichst mittels typeof(...):


task => task.GetType() == typeof(TaskA)

P
PierreDole Themenstarter:in
74 Beiträge seit 2017
vor 3 Jahren

Das funktioniert. Vielen dank.

2.078 Beiträge seit 2012
vor 3 Jahren
if (taskList.Find(task => task is TaskA) != null)

Ich würde mir den Namen "Task" nochmal überlegen.
"Task" hat nämlich auch eine sehr wichtige andere Bedeutung in der .NET-Welt.

H
114 Beiträge seit 2007
vor 3 Jahren

Als Ergänzung...Man kann dafür auch bequem LINQ in Form der OfType<T>-Methode verwenden.

var taskAObjects = taskList.OfType<TaskA>();

Grüße