我有一个包含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);
}
}
}
答案 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);
}