如何修改已创建的列表?

时间:2019-01-14 18:08:16

标签: c#

我有一个客户列表,我需要访问(从.txt文件)并更改其任何行,以及(例如,更改电话号码)

我已经有一个打开.txt文件,从中读取文件的代码,允许我添加新信息,然后将其保存到同一文件中。因此,该列表将更新。同样,它还允许我在列表中按关键字搜索。

   public static void ShowClientList() {

        string file =File.ReadAllText(@"C:\Users\Adminl\Documents\clients.txt");
        Console.WriteLine(file);
        Console.WriteLine();
    }

 public static void AddClient()
    {   Console.WriteLine("Civ");
        string civility = Console.ReadLine();                        
        Console.WriteLine("Name");
        string name = Console.ReadLine();                        
        Console.WriteLine("Surname");
        string surname = Console.ReadLine();                        
        Console.WriteLine("Age");
        string age = Console.ReadLine();                        
        Console.WriteLine("Telephone No");
        string telephone = Console.ReadLine();                       

        string appendText = civility +','+" "+ name + ',' + " " + surname + ',' + " " + age + ',' + " " + telephone + Environment.NewLine;        // This text is always added, making the file longer over time if its not deleted

        string path = @"C:\Users\Adminl\Documents\clients.txt";     // FILE that either exist or no


        File.AppendAllText(path, appendText);
    }

  public static void SearchClients()
    {

        string line;
        StreamReader clients = new StreamReader(@"C:\Users\Adminl\Documents\clients.txt");  // Read the file and display it line by line.  

            List<string> lines = new List<string>();


            while ((line = clients.ReadLine()) != null)
            {
                lines.Add(line);
            }

            Console.WriteLine("Please insert the criteria: ");
            string choose = Console.ReadLine();

            for (int i = 0; i < lines.Count; i++)
            {

                if (lines[i].ToUpper().Contains(choose.ToUpper()))           // search any part
                {
                    Console.WriteLine(lines[i]);
                }
            }

     }

我想从(客户端)列表中选择该行,并能够对其进行更改。如果可能,还为每行指定一个唯一的编号。对不起,我是一个新手,所以请不要打我太多。非常感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您可以通过使用 List.FindIndex 方法匹配值来获取特定索引。在代码中,您可以通过匹配声明如下的 choose 值来找到。

 string choose = Console.ReadLine();
 int index= lines.FindIndex(value => value== choose);

此外,您可以通过如下所示直接将值传递给索引来更改行

 lines[index] = "ModifiedLine";

答案 1 :(得分:0)

对于您的另一个问题“如果可能,还请给每行唯一的数字。”

答案是,您可能无法使用 List 为行指定唯一编号,而是可以尝试 Dictionary (字典),因为它具有唯一的列表没有。请找到使用列表和字典的声明

列表

List<string> lines = new List<string>();

词典

Dictionary<int, string> lines = new Dictionary<int, string>();

您可以在link

中获取有关字典的更多详细信息