linq 散列集中的非重复值和DataGridView中的插入

lf3rwulv  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(105)

我想显示一个包含所有不同值的哈希集 在两个DataGridView之间,但我没有成功显示字符串,我附加了图像。

var dataA = new HashSet<string>();
var dataB = new HashSet<string>();
            
for (int i = 1; i < dgv_A.Rows.Count; i++)
{
    dataA.Add(dgv_A[8, i].Value.ToString());
}
            
for (int i = 1; i < dgv_B.Rows.Count; i++)
{
    dataB.Add(dgv_B[8, i].Value.ToString());
}

if (dataA == dataB)
{
    lbl_resultado.Text = "Las certificaciones estan correctas";
}
else
{
     var error = dataA.Except(dataB).Concat(dataB.Except(dataA));
     var container = new HashSet<string>(error);
     dgv_B.DataSource = container.ToList();
}

需要的值有:

代码的结果:

注意:if (dataA == dataB) part,这不是我需要答案的问题,但谢谢。该部分需要它:

else
{
     var error = dataA.Except(dataB).Concat(dataB.Except(dataA));
     var container = new HashSet<string>(error);
     dgv_B.DataSource = container.ToList();
}

注2:项目的主要操作是验证文档(例如,没有用户被修改)如果任何值被更改,您需要知道哪些值 更改。

var error = dataA.Except(dataB).Concat(dataB.Except(dataA));
     var container = new HashSet<string>(error);
     dgv_B.DataSource = container.ToList();

我得到了不同的值 fron dataA和dataB,但我无法让它显示出现的文本。
注意事项:

3j86kqsm

3j86kqsm1#

你的问题是:

if (dataA == dataB)
{
}
if( dataA.SetEquals( dataB ) )
{
    lbl_resultado.Text = "Las certificaciones estan correctas";
}
  • 不要使用Enumerable.SequenceEquals,因为它将HashSet计算为有序的值序列,但HashSet是一个数学集合,它是无序的,并且(AFAIK)它的HashSet<T>.Enumerator迭代器以 undefined 顺序返回它的元素,因此试图通过比较序列来检查两个集合的集合相等性是不正确的。

相关问题