Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

251
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda