C# 如何从文本框中删除重复的行结果
这是我的数据结果代码 它会得到重复的行结果 我想删除重复的结果 请帮帮我C# 如何从文本框中删除重复的行结果,c#,C#,这是我的数据结果代码 它会得到重复的行结果 我想删除重复的结果 请帮帮我 private void DataResult(string result, string acc, string file) { lock (this) { if (result == "good") { MetroTextBox metroTextBox = this.textBox1; metroTextBox.Text
private void DataResult(string result, string acc, string file)
{
lock (this)
{
if (result == "good")
{
MetroTextBox metroTextBox = this.textBox1;
metroTextBox.Text = metroTextBox.Text + acc + Environment.NewLine;
file = Path.Combine(this.papka, "good.txt");
if (!Directory.Exists(this.papka))
{
Directory.CreateDirectory(this.papka);
}
File.AppendAllText(file, acc + "\r\n");
Listing.good++;
}
if (result == "error")
{
Listing.error++;
}
}
}
使用页面顶部的指令将其添加到
:
using System.Linq;
然后简单地像这样使用:
metroTextBox.Text = string.Join(Environment.NewLine, metroTextBox.Lines.Distinct());
在您的示例中:
private void DataResult(string result, string acc, string file)
{
lock (this)
{
if (result == "good")
{
MetroTextBox metroTextBox = this.textBox1;
metroTextBox.Text = string.Join(metroTextBox.Lines.Distinct(), acc, Environment.NewLine);
file = Path.Combine(this.papka, "good.txt");
if (!Directory.Exists(this.papka))
{
Directory.CreateDirectory(this.papka);
}
File.AppendAllText(file, acc + "\r\n");
Listing.good++;
}
if (result == "error")
{
Listing.error++;
}
}
}
假设此方法是将行添加到文本框的唯一方法,那么在添加之前,您可能应该检查文本框是否包含acc
if(!metroTextBox.Text.Contains(acc))
metroTextBox.Text = metroTextBox.Text + acc + Environment.NewLine;
旁注;如果重命名表单上的文本框,则无需使用其他名称为其建立变量。单击表单上的文本框,并在属性网格中显示(名称)textbox1,将其更改为metroTextBox
旁注2;此代码每次向文本框添加一行时,都会将文本框的内容追加到文件中。如果文件名没有更改,这也可能是一个重复源,因为添加3行后,您的文件将看起来像:
line1
line1
line2
line1
line2
line3
我建议你不要像在文本框中添加一行那样频繁地编写文件;一个操作很简单,另一个操作非常缓慢且复杂。将这些内容分成不同的方法,并较少调用write file您可以在HashSet的帮助下尝试收集独特的结果,例如
private HashSet<string> m_Results = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
显示结果代码中哪一行提供了重复项?
private void DataResult(string result, string acc, string file)
{
lock (this)
{
if (result == "good")
{
if (m_Results.Add(result)) {
// result is unique (not in m_Results)
MetroTextBox metroTextBox = this.textBox1;
metroTextBox.Text = metroTextBox.Text + acc + Environment.NewLine;
file = Path.Combine(this.papka, "good.txt");
//DONE: no need to check for directoty exitance
Directory.CreateDirectory(this.papka);
File.AppendAllText(file, acc + "\r\n");
}
else {
// result has been appeared before
}
Listing.good++;
}
if (result == "error")
{
Listing.error++;
}
}
}