Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从文本框中删除重复的行结果_C# - Fatal编程技术网

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++;
        }
    }
}