从列表中删除一行

时间:2011-10-09 18:34:48

标签: c#

我有一个包含6个文本框和一个删除按钮的表单。我想要的是读取一个文本文件并将其保存到列表中。之后我想在textbox1中给出一个值并从中删除该行列出该值存在。使用此代码(我已经完成)删除文本文件中的所有值。我应该更改为代码?我使用Microsoft Visual C#2010 Express。

   List<string> StoreItems;

   public Form1()
   {
       InitializeComponent();

       filePath = @"C:\Users\v\Desktop\text.txt";

       StoreItems = new List<string>();
   }



  private void button3_Click(object sender, EventArgs e)
    {


        using (var streamReader = new StreamReader(filePath, Encoding.Default))
        {
            while (!streamReader.EndOfStream)
            {
                StoreItems.Add(streamReader.ReadLine());
            }
        }
        using (var streamWriter = new StreamWriter(filePath, false, Encoding.Default))
        {
            foreach (string line in StoreItems)
            {
                if(line == textBox1.Text)//remove all from the list
                StoreItems.Remove(line);
            }
        }

    }

2 个答案:

答案 0 :(得分:2)

您可以使用RemoveAll()

  

删除与指定谓词定义的条件匹配的所有元素。

不需要对列表进行显式迭代。你可以这样称呼它:

StoreItems.RemoveAll(item => item == textBox1.Text);

您也忘了将列表写回文件。我想你想要这样的代码:

using (var streamReader = new StreamReader(filePath, Encoding.Default))
{
    while (!streamReader.EndOfStream)
    {
        StoreItems.Add(streamReader.ReadLine());
    }
}

StoreItems.RemoveAll(item => item == textBox1.Text);
using (var streamWriter = new StreamWriter(filePath, false, Encoding.Default))
{
    foreach (string line in StoreItems)
    {
        streamWrite.WriteLine(line);
    }
}

答案 1 :(得分:2)

using (var streamReader = new StreamReader(filePath, Encoding.Default)) 
    { 
        while (!streamReader.EndOfStream) 
        { 
            StoreItems.Add(streamReader.ReadLine()); 
        } 
    } 


int i = StoreItems.IndexOf(textBox1.Text);
while (i >= 0) 
{
    StoreItems.RemoveAt(i);
    i = StoreItems.IndexOf(textBox1.Text);
}