删除不起作用的重复项
本文关键字:不起作用 删除 | 更新日期: 2023-09-27 18:28:36
嗨,我能知道为什么这个代码不起作用吗?它起作用了,但它也会删除不重复的条目,对于一些列表,它会抛出一些错误
例如:
此列表有效,但也将删除http://test1.com
http://test.com
http://test.com
http://test1.com
http://1test.com
与此列表将抛出此"System.ArgumentNullException未处理"错误
http://test.com
http://test.com
http://test1.com
http://1test.com
http://etest.com
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog buka = new OpenFileDialog();
buka.InitialDirectory = "";
buka.Filter = "Text files(*.txt)|*.txt|All files (*.*)|*.*";
buka.FilterIndex = 2;
buka.RestoreDirectory = true;
buka.Title = "Cari";
buka.ShowDialog();
string bukafile = buka.FileName;
if (!String.IsNullOrEmpty(bukafile))
{
StreamReader isiFile = File.OpenText(bukafile);
while (isiFile.Peek() != -1)
{
if (!listBox1.Items.Contains(isiFile.ReadLine()))
{
listBox1.Items.Add(isiFile.ReadLine());
}
}
isiFile.Close();
}
}
您应该缓存isiFile.ReadLine()
中的行,以便在添加时比较同一行。
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog buka = new OpenFileDialog();
buka.InitialDirectory = "";
buka.Filter = "Text files(*.txt)|*.txt|All files (*.*)|*.*";
buka.FilterIndex = 2;
buka.RestoreDirectory = true;
buka.Title = "Cari";
buka.ShowDialog();
string bukafile = buka.FileName;
if (!String.IsNullOrEmpty(bukafile))
{
StreamReader isiFile = File.OpenText(bukafile);
while (isiFile.Peek() != -1)
{
// use local variable here
string line = isiFile.ReadLine();
if (!listBox1.Items.Contains(line))
{
listBox1.Items.Add(line);
}
}
isiFile.Close();
}
}
如果你没有一个非常大的文件,你可以使用替换很多代码
var lines = File.ReadLines(bukafile).Distinct();
listBox1.DataSource = lines.ToList();
您正在读取两行,每个ReadLine()
调用一行。第一行用于进行.Contains
检查,第二行用于添加到列表框中。这两条线没有任何关系。
因此,对于第一个列表,首先检查第一行http://test.com
是否在列表框中。事实并非如此,所以您阅读下一行,巧合的是也是http://test.com
,并将其添加到列表框中。然后,检查http://test1.com
是否在列表框中,发现它不在,然后继续将http://1test.com
添加到列表框中。
对于第二个列表,您有奇数个条目,所以对ReadLine
的最后调用返回,我猜是null,您无法将其添加到列表框中。
修复是
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog buka = new OpenFileDialog();
buka.InitialDirectory = "";
buka.Filter = "Text files(*.txt)|*.txt|All files (*.*)|*.*";
buka.FilterIndex = 2;
buka.RestoreDirectory = true;
buka.Title = "Cari";
buka.ShowDialog();
string bukafile = buka.FileName;
if (!String.IsNullOrEmpty(bukafile))
{
StreamReader isiFile = File.OpenText(bukafile);
while (isiFile.Peek() != -1)
{
string line = isiFile.ReadLine();
if (!listBox1.Items.Contains(line))
{
listBox1.Items.Add(line);
}
}
isiFile.Close();
}
}