IEnumberable.Except 显示文本框 c sharp 的差异

IEnumberable.Except to display differences in textbox c sharp

我是 C# 的新手,我在使用 IEnumerable.Except 上遇到了困难。我想要做的是使用 2 个骰子获得 100 个随机掷骰子的 2 个序列的差异。我有我的骰子和总计很好去。我的差异根本没有显示在我的 txtDifference 文本框中。我不确定我是否把它放在了正确的位置,或者它是否写错了。代码本身没有错误,我不确定如何修复它。这是我的代码,非常感谢任何帮助!!

   private void btnRoll_Click(object sender, EventArgs e)
    {
        //create random  and lists        
        randomizer = new Random();
        List<int> numbers = new List<int>();
        List<int> secondNumbers = new List<int>();

            //for loop for 1st sequence 
            for (i = 1; i < 100; i++)
            {
                string mssg = string.Empty;
                die1 = randomizer.Next(1, 7);
                die2 = randomizer.Next(1, 7);
                dieRoll1.Text = die1.ToString();
                dieRoll2.Text = die2.ToString();
                rollValue = die1 + die2;

                //add to collection.
                numbers.Add(i);

                //display results
                txtResults.Text += string.Concat(dieRoll1.Text, "               ", dieRoll2.Text, "               ", rollValue, "              ", Environment.NewLine);
            }

        //loop for second sequence. 
        for (i = 1; i < 100; i++)
        {
            string mssg = string.Empty;
            die1 = randomizer.Next(1, 7);
            die2 = randomizer.Next(1, 7);
            dieRoll1.Text = die1.ToString();
            dieRoll2.Text = die2.ToString();
            rollValue = die1 + die2;

            //add to collection. 
            secondNumbers.Add(i);

            //display results in second text box
            txtResults2.Text += string.Concat(dieRoll1.Text, "              ", dieRoll2.Text, "              ", rollValue, "              ", Environment.NewLine);
        }

        // IEnumerable for comparison between the two sequences 
        IEnumerable<int> onlyInFirstSet = numbers.Except(secondNumbers);

        //foreach to display the differences between the sequences 
        foreach (int number in onlyInFirstSet)
            txtDifference.Text = number.ToString(); 
    }

txtDifference.Text = number.ToString(); 将仅显示集合中的最后一个数字,因为您将在每次迭代中覆盖该值。

我认为您要显示所有值:

txtDifference.Text = String.Join(",", onlyInFirstSet);

两个循环都从 1 迭代到 100。然后,在这两种情况下,您都将 i 的值添加到列表中...这意味着两个列表最终的值都是 1 到 100他们。

numbers.Add(i);
secondNumbers.Add(i);

所以下面这行代码总是产生一个空列表。它从第一个数字 1 到 100 的集合中删除第二个数字 1 到 100 的集合。

IEnumerable<int> onlyInFirstSet = numbers.Except(secondNumbers);

相反,将 rollValue 值添加到列表中,而不是 foreach 循环迭代的变量:

rollValue = die1 + die2;

//add to collection.
numbers.Add(rollValue);

第二个循环和集合也是如此:

rollValue = die1 + die2;

//add to collection. 
secondNumbers.Add(rollValue);