2015-07-29 13 views
5

Sto provando a creare un programma di gestione contatti in un'applicazione console utilizzando un elenco per archiviare e visualizzare i dati. Devo visualizzare un rapporto che visualizza un riepilogo dei contatti disponibili e quindi avere un menu per consentire all'utente di interagire con il programma. Ho un metodo per creare un contatto e un oggetto di contatto. Ho anche un metodo per eliminare un contatto, ma voglio che l'utente sia in grado di scegliere un nome di contatto e di essere in grado di eliminare il contatto selezionato. Tuttavia non sono sicuro di come farlo.rimuovere l'elemento selezionato dall'utente da un elenco

Qualsiasi consiglio sarebbe apprezzato.

static void Main(string[] args) 
     {   
      //Declare the list 

      List<Contact> contactList = new List<Contact>(); 

      //Main Driver 
      char menuItem; 
      Console.WriteLine("Contact List\n"); 
      menuItem = GetMenuItem(); 
      while (menuItem != 'Q') 
      { 

       ProcessMenuItem(menuItem, contactList); 
       menuItem = GetMenuItem(); 

      } 
      Console.WriteLine("\nThank you, goodbye"); 
      Console.ReadLine(); 
     } 
     //Returns either a 'C', 'R', 'U', 'D', 'L', or 'X' to the caller 
     static char GetMenuItem() 
     { 
      char menuItem; 
      DisplayMenu(); 
      menuItem = char.ToUpper(IOConsole.GetChar("\nPlease pick an item: ")); 
      while (menuItem != 'C' 
       && menuItem != 'R' && menuItem != 'Q' && menuItem != 'U' && menuItem != 'D' && menuItem != 'S' && menuItem != 'L' && menuItem != 'F' && menuItem != 'P' && menuItem != 'T') 
      { 
       Console.WriteLine("\nError - Invalid menu item"); 
       DisplayMenu(); 
       menuItem = char.ToUpper(IOConsole.GetChar("\nEnter option or M for menu:")); 
      } 
      return menuItem; 
     } 

     static void DisplayMenu() 
     { 
      Console.WriteLine("C-> Create Contacts"); 
      Console.WriteLine("R-> Remove Contacts"); 
      Console.WriteLine("U-> Update Contacts"); 
      Console.WriteLine("D -> Load data from file"); 
      Console.WriteLine("S-> Save data to file"); 
      Console.WriteLine("L-> View sorted by last name"); 
      Console.WriteLine("F-> View sorted by first name"); 
      Console.WriteLine("P-> View by partial name search"); 
      Console.WriteLine("T-> View by contact type"); 
      Console.WriteLine("Q-> Quit"); 
     } 

     //Routes to the appropriate process routine based on the user menu choice 
     static void ProcessMenuItem(Char menuItem, List<Contact> contactList) 
     { 
      switch (menuItem) 
      { 
       case 'C': 
        createContact(); 
        break; 
       case 'R': 
        removeContact(contactList); 
        break; 
       case 'U': 
        updateContact(contactList); 
        break; 
       case 'D': 
        LoadFromFile(); 
        break; 
       case 'S': 
        saveToFile(); 
        break; 

       case 'L': 
        sortByLastName(contactList); 
        break; 
       case 'F': 
        sortByFirstName(contactList); 
         break; 
       case 'P': 
         DisplayList(contactList); 
         break; 
       case 'T': 
         sortByContactType(); 
         break; 
       case 'Q': 

         break; 

      }     
     } 
//allows the user to remove a contact 
     public static void removeContact(List<Contact> contactList) 
     { 

      for (int i = 0; i < contactList.Count; i++) 
       if (i % 5 == 0) 
      contactList.RemoveAt(i); 

     } 

risposta

1

potete fare la vostra funzione come questa: che accetterà la List e un contact name allora cancellerà la prima occorrenza del nome del contatto dall'elenco dei contatti.

public static void removeContact(List<Contact> contactList, object ContactName) 
     { 
      Contact contactToRemove = (Contact)contactList.AsEnumerable().Where 
             (x => x.ContactName == ContactName || 
             x.ContactNumber == (int)ContactName).First(); 
      contactList.Remove(contactToRemove); 
     } 

mia classe di contatto è:

class Contact 
    { 
     private int _ContactNumber; 

     public int ContactNumber 
     { 
      get { return _ContactNumber; } 
      set { _ContactNumber = value; } 
     } 
     private string _ContactName; 

     public string ContactName 
     { 
      get { return _ContactName; } 
      set { _ContactName = value; } 
     }    
    } 

Così il vostro caso sarà qualcosa di simile:

case 'R': 
     Console.WriteLine("enter the contact name/Contact Number To delete"); 
     removeContact(contactList, Console.Read().ToString()); 
     break; 
+0

In questo un nome di contatto potrebbe essere lo stesso, È necessario selezionare un campo Unico che non può corrispondere, Utilizzare il numero di telefono invece che sarebbe stato meglio – VizardCrawler

+0

@ vishal: ho aggiornato la mia risposta ora è in grado di rimuovere i dettagli in base nome del contatto o numero di contatto –

+0

Ma un contatto non dovrebbe mai essere cancellato usando il nome del contatto !! , come si potrebbe ripetere un nome, possono esserci due persone con lo stesso nome !! , E apprezzo che lo hai aggiornato, dovresti sempre rimuovere o modificare qualcosa che è unico, direi usare il numero stesso o Id se ha – VizardCrawler

4

Lo si può fare facilmente utilizzando LINQ o Lambda Expression:

Nel modello Classe del contatto rendono un campo dicono che il numero di telefono stesso.

Durante la selezione del contatto due parametri nel

removeContact(List<Contact> contactList,int selectedContactPhoneNo) 

si può semplicemente fare allora:

contactList.RemoveAll(x => x.PhoneNo == selectedContactPhoneNo); 
1

Un approccio semplice sarebbe quella di un loop all'interno di elenco dei contatti e quindi utilizzare uno della proprietà dal tuo contatto come chiave di ricerca.

//Search contact via number 
//Depending which key you would want for example Contact's Number: 
int number = 1; 
Contact contact = null; 
for (int i = 0; i < contactList.Count; i++) 
{ 
    if (contactList[i].Number == number) 
    { 
     contact = contactList[i]; //Assign contact 
     break; 
    } 
} 

//Remove contact from list 
if (contact != null) //If not null, it means we found it. Remove it from the list: 
{ 
    contactList.Remove(contact); 
} 

È possibile creare una funzione per l'implementazione di cui sopra per passare la parola chiave specifica durante la ricerca e la rimozione di elementi dall'elenco.

Problemi correlati