【问题标题】:Matching lisboxes items and creating result匹配 lisboxes 项目并创建结果
【发布时间】:2017-10-19 14:06:55
【问题描述】:

我正在用 c# 创建一个考试系统。我正在创建结果,我在 listbox1 中有答案,在另一个 listbox2 中有正确答案,我的问题是应该比较列表框中的值,并在其基础上生成结果。如果一半的值与学生匹配,则通过,否则失败。 我的代码如下,但它不起作用。

for(int intCount = 0; intCount < listBoxSanswers.Items.Count;intCount++)
{
    for (int intSubCount = 0; intSubCount < listBoxActAnswers.Items.Count; intSubCount++)
    {
        if (listBoxActAnswers.Items[intCount].ToString() == listBoxActAnswers.Items[intSubCount].ToString())
        {     
            listBox3.Items.Add(listBoxActAnswers.Items[intCount].ToString());
        }
    }
}

【问题讨论】:

  • 在 if 语句中,两个列表之一应该是“listBoxSanswers”
  • 当您说“它不起作用”时,您的确切意思是什么?是抛出错误还是没有得到预期的结果?
  • 不起作用意味着它不会将两个列表框的公共项复制到第三个列表框中。我希望 listbox1 和 listbox2 的项目应该进行比较,常见的项目应该添加到 listbox3。

标签: c# comparison listboxitem


【解决方案1】:

如果您想使用您的方法,则必须将两个列表之一更改为listBoxSanswers

如果你想要一个更短的方式,没有循环,你可以试试这行:

listBox3.Items.AddRange(listBoxActAnswers.Items.Cast<string>().ToList().Intersect(listBoxSanswers.Items.Cast<string>().ToList()).ToArray());

编辑: 哦,好吧,所以你有一个 DataTable 作为 DataSource。 比你可以这样做:

listBox3.Items.AddRange(listBoxActAnswers.Items.Cast<DataRowView>().Select(r => r[0]).ToList().Intersect(listBoxSanswers.Items.Cast<DataRowView>().Select(r => r[0]).ToList()).ToArray());

也许您应该将 Select(r =&gt; r[0]) 调整到您的 DisplayMember 的右列。

【讨论】:

  • 您的代码抛出以下错误无法将“System.Data.DataRowView”类型的对象转换为“System.String”类型。
猜你喜欢
  • 2018-01-13
  • 2023-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2019-12-28
  • 2015-12-23
  • 2010-12-04
相关资源
最近更新 更多