myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Eine vererbte Klasse in einer Liste finden
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Eine vererbte Klasse in einer Liste finden

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
PierreDole
myCSharp.de-Mitglied

Dabei seit: 10.07.2017
Beiträge: 40


PierreDole ist offline

Eine vererbte Klasse in einer Liste finden

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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:

C#-Code:
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:

C#-Code:
if(taskList.Find(task => task.GetType().Name == "TaskA") != null)
// do something

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

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von PierreDole am 22.07.2020 19:13.

22.07.2020 19:11 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.672
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

C#-Code:
task => task.GetType() == typeof(TaskA)
22.07.2020 19:22 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
PierreDole
myCSharp.de-Mitglied

Dabei seit: 10.07.2017
Beiträge: 40

Themenstarter Thema begonnen von PierreDole

PierreDole ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Das funktioniert. Vielen dank.
22.07.2020 19:44 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Palladin007 Palladin007 ist männlich
myCSharp.de-Mitglied

avatar-4140.png


Dabei seit: 03.02.2012
Beiträge: 1.277
Entwicklungsumgebung: Visual Studio 2019
Herkunft: NRW


Palladin007 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

C#-Code:
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.
22.07.2020 22:21 Beiträge des Benutzers | zu Buddylist hinzufügen
HiGHteK HiGHteK ist männlich
myCSharp.de-Mitglied

Dabei seit: 28.03.2007
Beiträge: 112


HiGHteK ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

C#-Code:
var taskAObjects = taskList.OfType<TaskA>();

Grüße
22.07.2020 22:29 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 09.08.2020 19:10