从列表中删除用户选择的项目

时间:2015-07-29 04:42:55

标签: c#

我正在尝试使用列表来存储和显示数据,从而在控制台应用程序中构建联系人管理器程序。我需要查看显示可用联系人摘要的报告,然后有一个菜单允许用户与该程序进行交互。我有一个方法来创建一个联系人和一个联系人对象。我还有一种删除联系人的方法,但我想让用户能够选择联系人姓名并能够删除所选联系人。但是我不确定如何做到这一点。

任何指导都将不胜感激。

    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);

        }

3 个答案:

答案 0 :(得分:4)

您可以使用LINQ或Lambda Expression轻松完成:

在联系人的模型类中,使字段说出电话号码本身。

中选择联系人两个参数时
removeContact(List<Contact> contactList,int selectedContactPhoneNo)

您可以这样做:

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

答案 1 :(得分:1)

您可以将此功能设为:这将接受Listcontact name,然后它将从联系人列表中删除第一次出现的联系人姓名。

 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);
        }

我的联系课程是:

  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; }
        }              
   }

所以你的情况会是这样的:

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

答案 2 :(得分:1)

一种简单的方法是遍历联系人列表,然后使用联系人中的某个属性作为搜索关键字。

//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);
}

您可以为上述实现创建一个函数,以便在搜索和删除列表中的项目时传递特定关键字。