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?
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)
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.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
Als Ergänzung...Man kann dafür auch bequem LINQ in Form der OfType<T>-Methode verwenden.
var taskAObjects = taskList.OfType<TaskA>();
Grüße