none
Buscar cadena de string en una lista RRS feed

  • Pregunta

  • Buenas vengo con una consulta sobre buscar un dato en una lista.

    tengo la lista inscripciones y le cargo alumnoCi, en lo que preciso de su ayuda es cuando, si voy a ingresar otro alumnoCi quiero saber si ese dato ya existe o no, esto es  el método que hice, cuando inicias la consola y ingresas por primera vez te dice no existe  pero cuando ya cargas un alumnoCi y ingresas otro alumnoCi distinto meda que ya existe 

     
    
    
    
    
     static  Inscripciones buscar(List<Inscripciones> ListA, string Ci)
            {
                foreach (Inscripciones buscarCi in ListA)
                {
                    if (buscarCi.Ci == Ci)
                        return buscarCi;
                }
                return null;
    
            }


     
    lunes, 29 de julio de 2019 3:21

Respuestas

  • hola

    No evaluaste usar linq para validar la existencia, porque se resuelve en una linea

    if(ListaA.Any(x=> x.Ci == Ci)){
    
       //si ingresa aqui entonces existe
    
    }

    a donde apunto es que no necesitas un funcion que itere cada

    Enumerable.Any Method

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta martin.s.t martes, 30 de julio de 2019 16:55
    lunes, 29 de julio de 2019 13:00
  • Pero en ese código que has puesto no estás llamando en ningún sitio al método buscar !?!?!?

    Hay un bucle que tiene una variable que se llama buscar, pero esa va a recibir el valor del propio bucle, nunca llama al método buscar aunque se llame igual.

    La llamada tendría que tener un aspecto parecido a este:

    if (buscar(misInscripciones, elValorQueBusco) != null)
    {
        Console.ForegroundColor = ConsoleColor.Green;
        Console.Write("\n\n\t\t\tCedula encontrada\n");
    }
    else
    {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine("\n\t\t\tCedula no encontrada");
    }
    


    lunes, 29 de julio de 2019 20:58
    Moderador

Todas las respuestas

  • ¿Cuál es concretamente el problema? En principio la búsqueda es correcta tal como la tienes. Si Ci existe, te debe devolver la inscripción, y si no existe te devuelve null. Por lo tanto tu método es válido para saber si existe o no existe. ¿Qué problema te ocasiona? ¿Da un error o algo?
    lunes, 29 de julio de 2019 6:26
    Moderador
  • ¿Puedes poner la parte del código en la que haces la llamada a esta función?

    La función está bien pero hay que ver que parámetros se le están pasando.


    Saludos, Javier J

    lunes, 29 de julio de 2019 6:34
  • hola

    No evaluaste usar linq para validar la existencia, porque se resuelve en una linea

    if(ListaA.Any(x=> x.Ci == Ci)){
    
       //si ingresa aqui entonces existe
    
    }

    a donde apunto es que no necesitas un funcion que itere cada

    Enumerable.Any Method

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta martin.s.t martes, 30 de julio de 2019 16:55
    lunes, 29 de julio de 2019 13:00
  • El problema es que de arranque si buscas CI te da que no existe pero cuando ya ingresas una CI y vas a buscar la inscripción te sale que existe pero si pones cualquier otra Ci también te da que existe aunque no este registrada, seguro es un tema de los parámetros que le estoy pasando 
      foreach (Inscripciones buscar in misInscripciones) 
                                {
                                    if (elalumno.Ci != null) 
                                    {
                              //MENSAJE DE CEDULA ENCONTRADA***********************
                                        Console.ForegroundColor = ConsoleColor.Green;
                                        Console.Write("\n\n\t\t\tCedula encontrada\n");
                                        Console.ForegroundColor = ConsoleColor.Gray;


    lunes, 29 de julio de 2019 13:47
  •   foreach (Inscripciones buscar in misInscripciones) 
                                {
                                    if (elalumno.Ci != null) 
                                    {
                              //MENSAJE DE CEDULA ENCONTRADA***********************
                                        Console.ForegroundColor = ConsoleColor.Green;
                                        Console.Write("\n\n\t\t\tCedula encontrada\n");
                                        Console.ForegroundColor = ConsoleColor.Gray;}

      if (elalumno.Ci == null)
                                    {
                                        Console.ForegroundColor = ConsoleColor.Red;
                                        Console.WriteLine("\n\t\t\tCedula no encontrada");
                                        Console.ForegroundColor = ConsoleColor.Gray;
                                    }

    METODO

     static  Inscripciones buscar(List<Inscripciones> ListA, string Ci)
            {
                foreach (Inscripciones buscarCi in ListA.ToList())
                {
                    if (buscarCi.Ci == Ci)
                        return buscarCi;
                }
                return null;

            }

    lunes, 29 de julio de 2019 13:50
  • Ok Leandro lo pondré en practica gracias 
    lunes, 29 de julio de 2019 13:55
  • Pero en ese código que has puesto no estás llamando en ningún sitio al método buscar !?!?!?

    Hay un bucle que tiene una variable que se llama buscar, pero esa va a recibir el valor del propio bucle, nunca llama al método buscar aunque se llame igual.

    La llamada tendría que tener un aspecto parecido a este:

    if (buscar(misInscripciones, elValorQueBusco) != null)
    {
        Console.ForegroundColor = ConsoleColor.Green;
        Console.Write("\n\n\t\t\tCedula encontrada\n");
    }
    else
    {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine("\n\t\t\tCedula no encontrada");
    }
    


    lunes, 29 de julio de 2019 20:58
    Moderador