Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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# 如果line after=line before,则从文本框中删除重复项_C#_Textbox_Duplicates - Fatal编程技术网

C# 如果line after=line before,则从文本框中删除重复项

C# 如果line after=line before,则从文本框中删除重复项,c#,textbox,duplicates,C#,Textbox,Duplicates,我有一个文本框,如果line before=line after,我想删除行 我有这样的文字: Ab cd ... Ef Gss ... EE oo ... EE oo ... // delete this line qq ss ff ok ee .. 我尝试了许多代码,但它删除了所有相同的行。我只想删除下一行。空行应该一直存在 我使用的代码: richTextBox1.Text = string.Join( Environment.NewLine, richTextBox1.Lines.

我有一个文本框,如果line before=line after,我想删除行

我有这样的文字:

Ab cd ...

Ef Gss ...
EE oo ...
EE oo ... // delete this line
qq ss ff

ok ee ..
我尝试了许多代码,但它删除了所有相同的行。我只想删除下一行。空行应该一直存在

我使用的代码:

richTextBox1.Text = string.Join( Environment.NewLine, richTextBox1.Lines.Distinct()); 
或:

for(int-tx=0;tx
试试这个:

textBox1.Text = string.Join(Environment.NewLine, textBox1.Lines.Distinct());
试试这个-

      string[] temp = richTextBox1.Lines;
      for (int i= 0; i< richTextBox1.Lines.Length - 1; i++)
      {
          if (richTextBox1.Lines[i] == richTextBox1.Lines[i+ 1]
               && rt.Lines[i] != String.Empty)
          {
              temp[i] = null;
          }
      }
      richTextBox1.Lines = temp.Where(a => a != null).ToArray();
string[]temp=richTextBox1.行;
对于(int i=0;ia!=null).ToArray();

您发布的代码看起来可以删除下一行,但您正在删除文本其余部分中与第一个循环中的行相等的所有行。 所以在你的代码中

xyz//line0
abc//line1
abc//line2
//line3
hjk//line4
abc//line5
行:2,5将被删除,如果我理解正确,您只想删除行2

我的例子

line1 text //line index 0
abc //line index 1
abc//delete this line, index 2
abc//delete this line, index 3
第一步。行索引2已删除

line1 text //line index 0
abc //line index 1
//deleted abc line, previous index 2, 
abc//delete this line, index 2, previous index 3
但删除行索引2后的tx将增加,因此您将位于基本文本行3 所以我们需要添加tx--


我认为收益率操作符解决了这个问题:

public static IEnumerable<String> GetDistinctLines(IEnumerable<String> lines)
{
    string currentLine = null;
    foreach (var line in lines)
    {
        if (line != currentLine)
        {
            currentLine = line;
            yield return currentLine;
        }
    }
}

Text=string.Join(Environment.NewLine,richTextBox1.Lines.Distinct(l=>l!=string.Empty))@哈姆雷特·哈科比扬:我有个错误:无法转换lambda表达式。我刚刚用你的文本和作品测试了我的答案。只需更换控制装置name@CarlosLande:你所说的替换控件名是什么意思?我想这会删除“所有”重复项而不是“所有下一行”重复项将答案命名为我的答案,请参见上文您的答案不是为我编译的。无效的lambda表达式请参见1.code,与我的代码相同,只是用RichTextBox1更改了textBox1您是对的,除非我没有读那行代码,只是大代码。对不起,是我的错P很高兴你得到了正确的答案谢谢,我怎样才能把这几行也删掉呢?我的意思是删除并删除完整的重复行?我们正在重置richTextBox的lines属性的最后一行将从richTextBox中删除这些行。
for (int tx = 0; tx < richTextBox1.Text.Length - 1; tx++)
    {
            if (richTextBox1.Lines[tx] == richTextBox1.Lines[tx+1])
            {
               // something like  richTextBox1.Lines[tx+1].RemoveAt(tx);
               tx--;
            }
        }
    }
if(!String.IsNullOrEmpty(richTextBox1.Lines[tx]) &&richTextBox1.Lines[tx] == richTextBox1.Lines[tx+1])
public static IEnumerable<String> GetDistinctLines(IEnumerable<String> lines)
{
    string currentLine = null;
    foreach (var line in lines)
    {
        if (line != currentLine)
        {
            currentLine = line;
            yield return currentLine;
        }
    }
}
richTextBox1.Lines = GetDistinctLines(richTextBox1.Lines).ToArray();