繁体   English   中英

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

[英]remove item selected by the user from a list

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

任何指导将不胜感激。

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

        }

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

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

同时选择联系人中的两个参数

removeContact(List<Contact> contactList,int selectedContactPhoneNo)

你可以这样做:

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

您可以使用以下功能:将接受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;

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM