Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

252
Views
Cómo comprobar si una lista contiene una clase específica en C#

Varias clases heredan de la clase abstracta Illness y anulan un name de campo
Enfermedad.cs:

 namespace health; abstract class Illness{ public abstract string name { get;} } class Cancer : Illness{ public override string name { get{ return "Cancer";} } } class Covid : Illness{ public override string name { get{ return "Covid";} } }

Hay una lista vacía List<Illness> illnesses = new List<Illness> en la clase principal y el objetivo es crear un método que agregue un valor a la lista de illnesses solo si esta lista no contiene la clase dada.
Intenté hacer esto:

 public void addIllness(Illness illness){ if (!illnesses.Contains(illness)){ illnesses.Add(illness); } }

pero no funciona.

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Puede (como lo menciona Lei Yang ) resolver esto marcando el tipo:

  • if(!illnesses.Any(i=>i is typeof(Covid)){ ... } para un tipo específico.
  • if (!illnesses.Any(i => i.GetType() == illness.GetType())) { ... } comparando el tipo de los objetos.

También podría crear un método genérico para lograr esto de una manera agradable:

 public void Add<T>(T illness) where T : Illness{ if(!illnesses.Any(t=>t is T)){ illnesses.Add(illness); } }

Como está anulando el name , incluso podría usarlo para un mejor rendimiento:

if(!illnesses.Any(i=>i.name == illness.name)){ ... } Sin embargo, esta es más o menos la versión explícita de lo que (nuevamente) @Lei Yang propuso al implementar IEquatable .

Sin embargo, esto parece ser un enfoque un poco extraño, debe usar objetos cuando puede tener más de una instancia de una clase, de lo contrario, tal vez reconsidere agregar una enumeración "Tipo de enfermedad" al lado del Nombre y deshágase de la herencia.

over 4 years ago · Santiago Trujillo Report

0

Puede verificar la clase usando el método GetType .

 if (!illnesses.Any(i => i.GetType() == illness.GetType())) { illnesses.Add(illness); }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!