Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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#_Listview_Redundancy - Fatal编程技术网

C# 显示冗余数据的列表视图

C# 显示冗余数据的列表视图,c#,listview,redundancy,C#,Listview,Redundancy,在下面的代码中,我将数据添加到列表视图中,但最终在其中包含冗余项。请告诉我哪里出了问题 private void button2_Click(object sender, EventArgs e) { listView1.Items.Clear(); StreamReader sr = new StreamReader("C:\\sample.txt"); string s; s = sr.ReadLine();

在下面的代码中,我将数据添加到列表视图中,但最终在其中包含冗余项。请告诉我哪里出了问题

    private void button2_Click(object sender, EventArgs e)
    {
        listView1.Items.Clear();
        StreamReader sr = new StreamReader("C:\\sample.txt");
        string s;
        s = sr.ReadLine();

        while (s != null)
        {
            s = sr.ReadLine();
            var m = Regex.Match(s, @"^([a-zA-Z._]+)@([\d]+)");

            if(m.Success)
            {
                allcont ac = new allcont();
                ac.name = m.Groups[1].Value;
                ac.number = m.Groups[2].Value;
                con.Add(ac);
                foreach (allcont aa in con)
                {
                    ListViewItem i = new ListViewItem(new string[] { aa.name, aa.number });
                    i.Tag = aa;
                    listView1.Items.Add(i);
                }
                s = sr.ReadLine();
            }
        }
        sr.Close();
    }
    contacts con = new contacts();
    public class contacts:List<allcont>
    { 

    }
    public class allcont
    {
        public string name;
        public string number;
    }
}
更新:这是我的列表视图显示的数据:

name number    
wer  123
wer  123
erty 098
wer  123
erty 098
sdf  645
wer  123
erty 098
sdf  645
wer  123
erty 098
sdf  645
ytu  432

我猜你得到的是

wer@123

wer@123
erty@098

wer@123
erty@098
sdf@645

wer@123
erty@098
sdf@645
ytu@432
原因:你这里有个问题

allcont ac = new allcont();
ac.name = m.Groups[1].Value;
ac.number = m.Groups[2].Value;
con.Add(ac);
foreach (allcont aa in con)
{
     ListViewItem i = new ListViewItem(new string[] { aa.name, aa.number });
     i.Tag = aa;
     listView1.Items.Add(i);
 }
因为这是在while循环中完成的。(您在每个循环中将内容添加到列表
con
,然后在while循环中循环此“递增列表”)

所以你应该移动“内环”


在while循环之外(在
sr.Close
之后)

我想你会得到类似的结果

wer@123

wer@123
erty@098

wer@123
erty@098
sdf@645

wer@123
erty@098
sdf@645
ytu@432
原因:你这里有个问题

allcont ac = new allcont();
ac.name = m.Groups[1].Value;
ac.number = m.Groups[2].Value;
con.Add(ac);
foreach (allcont aa in con)
{
     ListViewItem i = new ListViewItem(new string[] { aa.name, aa.number });
     i.Tag = aa;
     listView1.Items.Add(i);
 }
因为这是在while循环中完成的。(您在每个循环中将内容添加到列表
con
,然后在while循环中循环此“递增列表”)

所以你应该移动“内环”

在while循环之外(在
sr.Close
之后)

您正在每个匹配项上迭代完整con集合
去掉内环

allcont ac = new allcont();
ac.name = m.Groups[1].Value;
ac.number = m.Groups[2].Value;
con.Add(ac);

ListViewItem i = new ListViewItem(new string[] { ac.name, ac.number });
i.Tag = aa;
listView1.Items.Add(i);
您正在每个匹配项上迭代完整con集合
去掉内环

allcont ac = new allcont();
ac.name = m.Groups[1].Value;
ac.number = m.Groups[2].Value;
con.Add(ac);

ListViewItem i = new ListViewItem(new string[] { ac.name, ac.number });
i.Tag = aa;
listView1.Items.Add(i);

列表是什么样子的?冗余可以是很多事情…列表是什么样子的?冗余可以是很多事情。。。