我正在尝试使用列表来存储和显示数据,从而在控制台应用程序中构建联系人管理器程序。我需要查看显示可用联系人摘要的报告,然后有一个菜单允许用户与该程序进行交互。我有一个方法来创建一个联系人和一个联系人对象。我还有一种删除联系人的方法,但我想让用户能够选择联系人姓名并能够删除所选联系人。但是我不确定如何做到这一点。
任何指导都将不胜感激。
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);
}
答案 0 :(得分:4)
您可以使用LINQ或Lambda Expression轻松完成:
在联系人的模型类中,使字段说出电话号码本身。
在
中选择联系人两个参数时removeContact(List<Contact> contactList,int selectedContactPhoneNo)
您可以这样做:
contactList.RemoveAll(x => x.PhoneNo == selectedContactPhoneNo);
答案 1 :(得分:1)
您可以将此功能设为:这将接受List
和contact 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);
}
您可以为上述实现创建一个函数,以便在搜索和删除列表中的项目时传递特定关键字。